使用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(),因为用户不会丢失他们当前所在的页面。