前言:导出我们一般都是用 window.location.href=地址 这样拼接,但是后面跟的参数多了就不能用了,所以需要改成post请求
var searchParam = that.getSearchParams($.extend(that.form, that.form_q)) //传参的值
var xhr = new XMLHttpRequest();
var url = Domain + '/sysback/saleOrder/orderexecmain/exportMain';
xhr.open('POST', url, true);
// 设置请求头参数,可以添加token值
// xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 启用这个就是给后端传 对象格式,反之就是 form data格式 键值对
// 设置响应体返回类型,这里需要把返回的文件流转换成 blob 类型
xhr.responseType = 'blob';
xhr.onload = function (e) {
console.log(this.status)
if (this.status == 200) {
// 这里从 响应头里面取出 文件名称,根据实际情况操作
var name = xhr.getResponseHeader('Content-disposition');
name = decodeURIComponent(name);
// 这里对文件名进行操作,是根据实际情况操作的
var fileName = name.substring(20, name.length);
// 返回的文件流,转换成blob对象
var blob = new Blob([xhr.response]);
// 转换成blob类型的url
var blobUrl = URL.createObjectURL(blob);
// 模拟 a 标签进行下载
var eLink = document.createElement('a');
// 设置 a 标签的展示方式,默认 display:none
eLink.style.display = 'none';
// 设置 a 标签的 url
eLink.href = blobUrl;
// 设置 下载文件的文件名称
eLink.download = fileName;
document.body.appendChild(eLink);
eLink.click();
document.body.removeChild(eLink);
}
};
var formData = new FormData();
formData.append("searchParam", JSON.stringify(searchParam)); //启用这个就是给后端传 form data 格式
xhr.send(formData);
如果想传对象:就把请求头的注释去掉,就不需要new formData了 直接:xhr.send(JSON.stringify(paramData));