Ajax请求文件下载操作失败的原因和解决办法

使用Poi做excel表格导出功能,第一个想到的就是用Ajax来发送请求,但是Ajax和后台代码都执行了,就是无法下载文件。

前台代码

 1 function exportExl(){
 2             var form = $("input:hidden").serialize();
 3             $.ajax({
 4                 url: 'ReportStatistics/exportExcelProcurement.do',
 5                 type: 'GET',
 6                 //dataType: 'json',
 7                 data: form,
 8                 error: function(XMLHttpRequest, textStatus, errorThrown) { 
 9                     alert(XMLHttpRequest.status); 
10                     alert(XMLHttpRequest.readyState); 
11                     alert(textStatus); 
12                     }, 
13                 success:function(data){
14                     console.log("success");
15                 }
16             });

失败的原因:

那是因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。

解决方案:

使用 window.location.href  改变当前页面的url进行跳转下载。

1 function exportExl(){
2             var form = $("input:hidden").serialize();
3             window.location.href = "ReportStatistics/exportExcelProcurement.do?"+form;
4         }
原文地址:https://www.cnblogs.com/lvjunlong/p/9337005.html