平常项目中遇到需要后台生成 Excel 表格并导出, 就想当然的前台用 Ajax 调用, 后台用 Aspose.Cells.lic 生成文件流并导出,
后台数据整合没什么问题, 前台页面没有任何反应.
原因: Ajax 请求只是个 "字符型" 的请求, 即请求的内容是以文本类型存放的. 文件的下载是以二进制形式进行的, Ajax 没法解析后台返回的文件流, 所以无法处理二进制流 response 输出来下载文件.
解决办法:
用提交 form 表单的形式或者 < a > 标签跳转的形式导出 Excel
- var url = "/abc/abc?paras="+args;
- $('<form method="get"action="' + url + '"></form>').appendTo('body').submit().remove();
- // 点击导出按钮导出 Excel 表格
- $("#btn").on("click",function(){
- var params = {};
- postExcelFile(params, "http://www.XXX_excel");
- });
- //params 是 post 请求需要的参数, url 是请求 url 地址
- function postExcelFile(params, url) {
- var form = document.createElement("form");
- form.style.display = 'none';
- form.action = url;
- form.method = "post";
- document.body.appendChild(form);
- for(var key in params){
- var input = document.createElement("input");
- input.type = "hidden";
- input.name = key;
- input.value = params[key];
- form.appendChild(input);
- }
- form.submit();
- form.remove();
- }
来源: http://www.bubuko.com/infodetail-3002479.html