之前一直在vue项目里做导出下载,现在原生项目中也遇到了导出功能,在尝试 N 种写法后,终于成功了!!!
如果请求需要传参则在 xhr.send() 里加
//接口需要的token
var token = 'xxx'
//请求的后台地址
var url = 'you url'
//post请求需要的参数
var paramsMap = {
type:'1'
}
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8');
xhr.setRequestHeader("Authorization", token);
xhr.responseType = 'blob'; // 设置响应类型为Blob
xhr.onload = function () {
if (this.status === 200) {
// 创建一个Blob URL
var blob = this.response;
var blobUrl = window.URL.createObjectURL(blob);
// 创建一个临时的<a>标签
var a = document.createElement('a');
a.href = blobUrl;
a.download = '列表.xlsx'; // 设置下载文件名
// 触发下载
document.body.appendChild(a);
a.click();
// 清理临时DOM和对象URL
document.body.removeChild(a);
window.URL.revokeObjectURL(blobUrl);
}
};
xhr.send(JSON.stringify(paramsMap))