一般的下载发送请求时,使用的是window.location.href
但是这有一个问题,就是在本地测试和在服务器上测试的时候上传的文件位置不同,很可能找不到下载文件,此时页面就会跳转到一个错误页面,而前台无法接收一个反馈,使页面保持原状
因此尝试使用如下方法使前台可以接收到反馈
用(原始的)ajax来发送请求:
// 1、定义发送请求的url
var url = "/download";
// 2、相当于先试着发请求,看看返回结果是什么
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
//这步至关重要,命令xhr返回给你的是blob(二进制大对象)类型的数据
xhr.responseType = 'blob';
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4){
//当执行完成时
if(xhr.status === 200){
// 3、文件存在且可以下载,则正式发送请求下载文件
window.location.href = url;
}else{
//文件下载失败,弹出提示
alert("文件下载失败!");
}
}
};
这样做在第一次尝试发请求时,若请求是失败的,后台依旧会报错(这里还未找到解决办法),但前台可以有一个反馈提示,不至于让页面跳转崩掉