使用Ajax jquery POST接收.xls文件

我试图通过Ajax POST将Excel文件返回到服务器,服务器生成.xls文件,但它没有传递到前端,我认为它与我如何处理有关响应。

它应该启动Excel文件的文件下载。 最初我有dataType JSON ,但在搜索线程后,我认为它与dataType格式和.done函数有关,但.done它应该是什么。

 function requestFile(myJSON) { var urlrequest = "mywebappexport/excel"; var link = $('#exportbtn'); $.ajax({ url: link.attr('href'), type: "POST", data: JSON.stringify(myJSON), cache: true, contentType: "application/json; charset=utf-8", complete: function (data) { var ifr = ($('').attr('src', link.attr('href')).hide().appendTo(link)) setTimeout(function () {ifr.remove();}, 5000); } }) }; 

更新的代码:在现代浏览器上工作但在IE8上失败 – 错误Unexpected call to method or property access. 在jQuery版本1.9.1.js. this.appendChild( elem );

试试这个http://jsfiddle.net/abLeR/

它使用隐藏的iFrame和ajax下载tar文件。 同样可以用于xls文件。

HTML

 Download  

使用Javascript

 $(".download").click(function (e) { e.preventDefault(); var link = $(this); $('.loading').show(); $.ajax({ type: 'HEAD', url: link.attr('href'), complete: function () { $('.loading').hide(); var ifr = $('').attr('src', link.attr('href')).hide().appendTo(link) setTimeout(function () {ifr.remove();}, 5000); } }); }); 

您无法使用AJAX从服务器下载文件。 浏览器将拒绝Javascript访问用户的文件系统。

您应该考虑在服务器端提供“下载servlet”,它可以设置适当的标头以确保浏览器下载文件或提示用户保存从服务器接收的流。

如前所述,您还可以使用某些可以为您提供类似AJAX体验的插件。 在内部,他们可能正在使用iFrame来模拟类似AJAX的行为。