ajax 传数组参数 并下载zip文件 兼容ie
时间: 2023-05-24 09:03:05 浏览: 273
A:要在ajax请求中传递数组参数并下载zip文件,可以像下面这样进行操作:
```javascript
// 创建一个XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 指定请求方法和URL
xhr.open('POST', 'download.php');
// 设置请求头:Content-Type为application/x-www-form-urlencoded
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 定义响应类型为二进制数据
xhr.responseType = 'blob';
// 构建传递的参数对象
var param = {
arr: [1, 2, 3, 4, 5]
};
// 将参数对象序列化成字符串
var data = 'param=' + encodeURIComponent(JSON.stringify(param));
// 发送ajax请求
xhr.send(data);
// 请求完成后的回调函数
xhr.onload = function () {
if (xhr.status === 200) {
// 获取响应数据
var blob = xhr.response;
// 创建一个a标签,设置下载属性并添加到文档中
var a = document.createElement('a');
a.style.display = 'none';
a.href = URL.createObjectURL(blob);
a.download = 'filename.zip';
document.body.appendChild(a);
// 模拟点击a标签进行下载
a.click();
// 移除a标签
document.body.removeChild(a);
}
};
// 兼容ie方法
if (window.navigator.msSaveOrOpenBlob) {
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
var blob = new Blob([xhr.response], { type: 'application/octet-stream' });
window.navigator.msSaveOrOpenBlob(blob, 'filename.zip');
}
};
}
```
需要注意的是,对于兼容IE的情况,需要在readystatechange事件中判断xhr.readyState是否为4,以确保请求已经完成。另外,由于IE不支持responseType属性,所以需要使用Blob对象来构建响应数据,然后调用window.navigator.msSaveOrOpenBlob方法来触发下载。
阅读全文