使用jQuery使用AJAX发送Excel数据

我有以下function,从数据库中提取数据。 ajax调用工作正常。 如何将我的成功function中的制表符分隔的数据发送给用户? 将竞争types设置为“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。

编辑:我find了一个方法来做我想要的。 我没有将用户redirect到一个能够提示他们保存/打开Excel文件的新页面,而是在隐藏的iframe中打开了页面。 这样,用户点击一个button,并提示他们保存/打开一个Excel文件。 没有页面redirect。 它是Ajax吗? 不,但它解决了我真正的问题。

这是我打电话button点击的function:

  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是…错误的select。 将用户redirect到将使用适当的MIMEtypes向下发送数据的服务器资源,并让浏览器找出如何处理它。

在HTML中我有一个表单与串行input元素和一个button,调用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表或者任何你想要的。

由于使用JavaScript,AJAX受到JavaScriptdevise的限制,其中包括与客户端机器上的其他进程交互。 在这种情况下,这是一件好事。 您不希望网站能够自动加载含有恶意macros的Excel文档。

如果你想在浏览器中显示数据,你可以使用AJAX; 否则,您只需提供指向Excel文档的链接,并让浏览器的常规下载处理function找出要执行的操作。

有可能你不想用javascript做到这一点。

我想你想要做的是创build一个响应页面与我的typesapplication / csv然后redirect到该页面的用户。 我可能会做一个window.open(),因为用户不会丢失他们当前所在的页面。