原生ajax 请求
const getExcel = () => {
var method = 'post';
var url = 'http://localhost.....';
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
xhr.onload = function ()
{
if (this.status == 200)
{
var blob = this.response;
//这一段用来判断是否是IE浏览器,因为下面有些代码不支持IE
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, "NPI_PROJECT.xlsx");
return;
}
var a = document.createElement('a');//在dom树上创建一个a标签
var url = window.URL.createObjectURL(blob);
a.href = url;//将url赋值给a标签的href属性
a.download = 'xxxxxx.xls';//设置设置下载文件的名称
a.click();
}
};
xhr.send(JSON.stringify({
data: ""
}));
});
axios
有一点问题,如果后端接收的参数为raw格式,就需要修改传参方式
const exportExcelData = async () => {
const data = JSON.stringify({})
let res = await Axios(
{
url: API,
method: "POST",
data: data,
},
{ responseType: "blob" },
{
headers: {
dataType: 'json',
contentType: 'application/json',
}
}
)
if (!res || !res.data) {
return;
}
let r = new FileReader()
let _this = this
r.onload = function () {
try {
// 如果返回的是json 在这里处理
res = JSON.parse(this.result)
if (res.Status == "true") {
} else {
}
} catch (err) {
const content = res.data;
const blob = new Blob([content]);
let url = window.URL.createObjectURL(blob);
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute(
"download",
res.headers["content-disposition"].split("=")[1]
);
document.body.appendChild(link);
link.click();
}
}
r.readAsText(res.data) // FileReader的API
}