以下是我的情景:
我有一个生成管理工作区大量导出的网址 - 通常大约3mb,生成需要15秒。
当前实现是对按钮上具有download
属性的URL的正常同步请求,以强制下载内容。
我想要做的是可以在点击时禁用按钮,然后在服务器响应并开始下载时重新启用它。这对于同步请求来说非常棘手,但是对于XHR请求应该很容易。唯一的问题是你无法通过XHR触发下载。
然而,如果可能的话,理论上的解决方案可能如下:
download
和href
属性附加到按钮或其他一些锚元素click()
事件,以便同步重新请求数据导出这可能吗?
答案 0 :(得分:1)
我不确定它是否适用于您的用例,但是根据您给我们的内容,我会说:
使用xhr.responseType = 'blob'
属性从XHR请求Blob。
然后,从响应中,您可以创建一个名为URL.requestObjectURL(blob)
的对象网址,您可以将其作为锚点href
属性传递。
这样,您就可以在用户的计算机上缓存您的响应。
但请注意,在用户关闭当前窗口或硬刷新页面之前,此Blob / Object URL将被缓存,因此您必须调用URL.revokeObjectURL(yourAnchor.href)
将其从缓存中释放。
所以有些代码阻止:
var xhr = new XMLHttpRequest();
xhr.onload = function(){
var blob = this.response;
yourAnchor.href = URL.createObjectURL(blob);
};
xhr.responseType = 'blob';
xhr.open(yourURL);
xhr.send();
对于重新触发点击部分,我不记得yourAnchor.click()
的浏览器支持,但yourAnchor.innerHTML='processing as finished, please click here to confirm the download'
可能有效。