这里写自定义目录标题
Ajax请求无法导出excel!!!
最近要做一个table数据导出excel的需求,本来想Ajax请求一下后台就可以了,没想到死活不见效果.上网搜了一下,遇到此类问题的不少,在这里记录一下.
问题描述
前端发送ajax请求,后端生成excel文件,最后用response输出文件流,没有报错也没有文件下载提示。
原因
ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。
解决方法
改成隐藏的iframe页中form表单提交
/*===================post请求下载文件
* options:{
* url:'', //下载地址
* data:{name:value}, //要发送的数据
* method:'post'
* }
*/
var postDownLoadFile = function (options) {
var config = $.extend(true, { method: 'post' }, options);
var $iframe = $('<iframe id="down-file-iframe" />');
var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
$form.attr('action', config.url);
for (var key in config.data) {
$form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
}
$iframe.append($form);
$(document.body).append($iframe);
$form[0].submit();
$iframe.remove();
}
//导出请求
$("#Export_botton").on('click',
function() {
var param = {
data:data
};
postDownLoadFile({
url:pathUrl + '/month_statistic/data/export',
data:param,
method:'post'
});
});
后台再用request.getParameterNames(); 即可接受到参数