post请求无法直接发送请求下载excel文档,是因为我们在后台改变了响应头的内容:Content-Type: application/vnd.ms-excel 导致post请求无法识别这种消息头,导致无法直接下载。
解决方法:
改成使用form表单提交方式即可
/*===================post请求下载文件
- options:{
- url:‘’, //下载地址
- data:{name:value}, //要发送的数据
- method:‘post’
- }
*/
点击导出按钮
$("#exportExcel").on('click',
function () {
postDownLoadFile({
url: downloadUrl ,
data: {
JsonData: encodeURIComponent(JSON.stringify(lastQueryCondition))
},
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();
}
前端传的数据进行json解码
//string str1 = jsonData;
//string str2 = System.Web.HttpUtility.UrlEncode(str1, Encoding.GetEncoding("GB2312"));//这个是对字符串进行编码
jsonData = System.Web.HttpUtility.UrlDecode(jsonData, Encoding.GetEncoding("GB2312"));//解码
//上面注释了的一行代码是对URI编码后的字符串进行解码。