Javascript 如何使用dojo下载文件而不冻结浏览器?
就这样 我使用的是SpringMVC控制器,它从服务bean获取以字节[]为单位的文件。该服务只是从磁盘读取文件 到目前为止没有问题,我只需要将字节[]写入ResponseBody并手动设置响应内容类型。(这里没问题,或者我遗漏了什么) 我的怀疑来自于我的javascript代码。我正在使用Dojo1.7.2。 通过快速研究,我似乎可以使用dojo.io.IFrame实现“异步”下载行为 dojo还有其他的方法吗?还是说IFrame是我们要走的路Javascript 如何使用dojo下载文件而不冻结浏览器?,javascript,ajax,dojo,Javascript,Ajax,Dojo,就这样 我使用的是SpringMVC控制器,它从服务bean获取以字节[]为单位的文件。该服务只是从磁盘读取文件 到目前为止没有问题,我只需要将字节[]写入ResponseBody并手动设置响应内容类型。(这里没问题,或者我遗漏了什么) 我的怀疑来自于我的javascript代码。我正在使用Dojo1.7.2。 通过快速研究,我似乎可以使用dojo.io.IFrame实现“异步”下载行为 dojo还有其他的方法吗?还是说IFrame是我们要走的路 另外,如果您对本主题有任何建议,我们将不胜感激。
另外,如果您对本主题有任何建议,我们将不胜感激。事实上,使用iframe是您最好的选择,从您所说的,您不会只加载文本,因此无法真正使用ajax,因为javascript ajax是为文本操作而设计的XMLHttpRequest还不支持使用二进制数据的响应,所以是iframe+1。我相信对包含“blob”的请求的支持是有限的,所以-有一个
sendAsBinary
但没有getAsBinary
basicallydojo.io.IFrame+1,但下载文件时很难处理。
function downloadExcel(urlParm){
var xhr = new XMLHttpRequest();
xhr.open('POST', urlParm);
xhr.responseType = 'blob';
xhr.send();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
// $.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.ms-excel' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, 'excelFile1.xls');
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = 'excelFile1.xls';
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else
alert("HTTP return status: " + xhr.status);
}
}
}