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 }