平常项目中遇到需要后台生成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 ??}
【ajax导出excel数据异常】
原文地址:https://www.cnblogs.com/chengxiaofei2018/p/10612057.html