平常项目中遇到需要后台生成excel表格并导出,就想当然的前台用ajax调用,后台用Aspose.Cells.lic生成文件流并导出,
后台数据整合没什么问题,前台页面没有任何反应。
原因:ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。
解决办法:
用提交form表单的形式或者<a>标签跳转的形式导出excel
-
1 var url = "/abc/abc?paras="+args; 2 3 $(‘<form method="get" action="‘ + url + ‘"></form>‘).appendTo(‘body‘).submit().remove();
1 //点击导出按钮导出excel表格 2 $("#btn").on("click",function(){ 3 var params = {}; 4 postExcelFile(params, "http://www.XXX_excel"); 5 }); 6 7 //params是post请求需要的参数,url是请求url地址 8 function postExcelFile(params, url) { 9 var form = document.createElement("form"); 10 form.style.display = ‘none‘; 11 form.action = url; 12 form.method = "post"; 13 document.body.appendChild(form); 14 15 for(var key in params){ 16 var input = document.createElement("input"); 17 input.type = "hidden"; 18 input.name = key; 19 input.value = params[key]; 20 form.appendChild(input); 21 } 22 23 form.submit(); 24 form.remove(); 25 }
原文地址:https://www.cnblogs.com/chengxiaofei2018/p/10612057.html
时间: 2024-10-15 06:56:56