使用jQuery使用AJAX发送Excel数据
我具有以下从数据库中提取数据的功能。 ajax调用正常工作。如何将成功功能中制表符分隔的数据发送给用户?将对接类型设置为" application / vnd.ms-excel"无效。成功警报将显示格式正确的数据。
function SendToExcel() {
$.ajax({
type: "GET",
url: "/Search.aspx",
contentType: "application/vnd.ms-excel",
dataType: "text",
data: "{id: '" + "asdf" + "'}",
success: function(data) {
alert(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}});
}
我不想在浏览器中显示数据-我想将其发送到Excel。
编辑:我找到了一种方法来做我想要的。我没有将用户重定向到会提示他们保存/打开Excel文件的新页面,而是在隐藏的iframe中打开了该页面。这样,用户单击一个按钮,就会提示他们保存/打开Excel文件。没有页面重定向。是阿贾克斯吗?不,但是它解决了我遇到的真正问题。
这是单击按钮时我要调用的功能:
function SendToExcel() {
var dataString = 'type=excel' +
'&Number=' + $('#txtNumber').val() +
'&Reference=' + $('#txtReference').val()
$("#sltCTPick option").each(function (i) {
dataString = dataString + '&Columns=' + this.value;
});
top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;;
}
解决方案
AJAX是...错误的选择。将用户重定向到服务器资源,该服务器资源将使用正确的MIME类型向下发送数据,并让浏览器确定如何处理。
由于AJAX使用JavaScript,因此受JavaScript设计限制的约束,其中包括与客户端计算机上的其他进程进行交互。在这种情况下,这是一件好事。我们不希望网站能够自动加载其中包含恶意宏的Excel文档。
如果要在浏览器中显示数据,则可以使用AJAX。否则,我们只需要提供一个指向Excel文档的链接,然后让浏览器的常规下载处理功能就可以确定该怎么做。
我们可能不想使用javascript。
我想我们要执行的操作是使用地雷类型application / csv创建一个响应页面,然后将用户重定向到该页面。我可能会做一个window.open(),因为用户不会丢失他们当前所在的页面。
在HTML中,我有一个带有串行输入元素的Form和一个调用JavaScript函数onclick =" exportExcel();的按钮。
然后在JavaScript文件中:
function exportExcel(){
var inputs = $("#myForm").serialize();
var url = '/ajaxresponse.php?select=exportExcel&'+inputs;
location.href = url;
}
最后是一个对某些内容做出响应的数据透视文件
PHP代码:
case 'exportExcel':{
ob_end_clean();
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=exportFile.xls");
echo $html->List($bd->ResultSet($_GET));
}
$ html是处理html的对象,而$ bd是从数据库返回数据的对象
发送我们自己的html表或者我们想要的任何内容。

