前言:导出我们一般都是用 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));