Javascript 在浏览器后台加载下载,告知何时完成
我正在尝试获取一个文件,它需要几秒钟的时间在后台加载,这样我就可以同时显示一个微调器 我目前正在尝试在后台使用iframe,这是可行的,但我不确定加载完成后如何通知我(这样我就可以删除微调器) 有什么好办法吗?有比iframe更好的解决方案吗 以下是我目前的代码:Javascript 在浏览器后台加载下载,告知何时完成,javascript,jquery,download,Javascript,Jquery,Download,我正在尝试获取一个文件,它需要几秒钟的时间在后台加载,这样我就可以同时显示一个微调器 我目前正在尝试在后台使用iframe,这是可行的,但我不确定加载完成后如何通知我(这样我就可以删除微调器) 有什么好办法吗?有比iframe更好的解决方案吗 以下是我目前的代码: <script> $(document).ready(function() { var link = $('.generate-pdf'); link.click(function
<script>
$(document).ready(function() {
var link = $('.generate-pdf');
link.click(function(e) {
e.preventDefault();
var spinner = $("<img src='/assets/images/ajax-loader.gif' />");
var iframe = $('<iframe src="' + link.attr('href') + '" style="height:0;width:0;visibility;hidden;display:none;"></iframe>');
link.before(spinner);
link.before(iframe);
});
})
</script>
$(文档).ready(函数(){
var link=$('.generate pdf');
链接。单击(功能(e){
e、 预防默认值();
变量微调器=$(“”);
变量iframe=$('');
链接前(微调器);
前链接(iframe);
});
})
根据,鉴于我的内容处置
是附件
,我不能保证收到任何事件。我可以轮询iframe上的任何属性以了解情况吗?您尝试过吗
iframe.load(function(){
log("done");
})
最后,我不得不联系服务器,查看文件是否已发送到浏览器。我仍然希望看到一个纯粹的基于客户端的实现 谢天谢地,下载是用PHP生成的,所以这还可以
<script>
$(document).ready(function() {
var link = $('.generate-pdf');
link.click(function(e) {
e.preventDefault();
var spinner = $("<div class='spinner'><img src='/assets/images/ajax-loader.gif' /><span>Your PDF is being generated...</span></div>");
var downloadKey = new Date().getTime();
var iframe = $('<iframe src="' + link.attr('href') + '&downloadKey='+downloadKey+'" style="height:0;width:0;visibility;hidden;display:none;" onload="alert(\'hello\')"></iframe>');
link.before(spinner);
link.before(iframe);
var hasFinished = function(downloadKey, callback) {
var that = this;
$.ajax({
url: "index.php?controller=is-download-finished&downloadKey=" + downloadKey,
success: function(data) {
if (data) {
callback();
} else {
setTimeout(function() {
that(downloadKey, callback);
}, 1000);
}
}
})
};
hasFinished(downloadKey, function() {
spinner.remove();
iframe.remove();
});
});
})
</script>
$(文档).ready(函数(){
var link=$('.generate pdf');
链接。单击(功能(e){
e、 预防默认值();
var spinner=$(“您的PDF正在生成…”);
var downloadKey=new Date().getTime();
变量iframe=$('');
链接前(微调器);
前链接(iframe);
var hasFinished=函数(下载键,回调){
var=这个;
$.ajax({
url:“index.php?controller=下载完成&downloadKey=“+downloadKey,
成功:功能(数据){
如果(数据){
回调();
}否则{
setTimeout(函数(){
那(下载键,回调);
}, 1000);
}
}
})
};
hasFinished(下载键,函数(){
spinner.remove();
iframe.remove();
});
});
})
额外的请求只返回JSON true或false 是的,我不喜欢这样-至少在Chrome上是这样。