ajax的接收类型是“字符串”,而不是流类型,所以不能实现文件下载。那么一般实现文件下载都会用隐式表单请求、window.href.location、隐式iframe的src、进行文件下载。
如果一定要实现ajax异步下载文件的方式,可以通过原生的ajax进行下载,因为异步请求,导致后台
response.setHeader("Content-Disposition","attachment;filename=healthReportAndItem.xlsx");不起作用
只能在原生ajax发送请求的时候定义好文件名和文件类型!
$("#exportReportBtn").click(function(){
var startTime = $("#startTime").val();
var endTime = $("#endTime").val();
var xhr = new XMLHttpRequest();
//指定接收二进制流对象
xhr.responseType = 'blob';
xhr.open('post','/healthReport/exportHealthReport',true);
//参数json串
xhr.setRequestHeader('Content-Type',
'application/json;charset=utf-8');
xhr.onload = function () {
if (this.status == 200) {
var blob = this.response;
var request = document.createElement('a');
var url = window.URL.createObjectURL(blob);
request.href = url;
request.download = '监测报告.xlsx';
request.click();
}
}
if (xhr.readyState == 1) {
$("#exportReportBtn").attr({disabled:"disabled"});
}
//回调函数
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
$("#exportReportBtn").removeAttr("disabled");
}
}
//发送请求
xhr.send(JSON.stringify({
"startTime" : startTime,
"endTime" : endTime
}));
});