post请求无法直接发送请求下载excel文档,是因为我们在后台改变了响应头的内容: Content-Type: application/vnd.ms-excel
导致post请求无法识别这种消息头,导致无法直接下载。
解决方法:
改成使用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();
}
//导出
$("#btnExport_year").on('click',
function() {
var param={};
postDownLoadFile({
url:path + '/monthlyCollection/exportExcelDoc.json',
data:param,
method:'post'
});
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
参数直接放到param中就可以带到后台了,
后台再用request.getParameterNames();
即可接受到参数
以下是请求例子:
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);
debugger;
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();
}
//导出
$("#tableDownload").on('click',
function() {
var param={};
postDownLoadFile({
url:'../sys/advproreport/downExample',
data:{'advProJson':JSON.stringify(advProJson)},
method:'post'
});
});