Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器后台加载下载,告知何时完成_Javascript_Jquery_Download - Fatal编程技术网

Javascript 在浏览器后台加载下载,告知何时完成

Javascript 在浏览器后台加载下载,告知何时完成,javascript,jquery,download,Javascript,Jquery,Download,我正在尝试获取一个文件,它需要几秒钟的时间在后台加载,这样我就可以同时显示一个微调器 我目前正在尝试在后台使用iframe,这是可行的,但我不确定加载完成后如何通知我(这样我就可以删除微调器) 有什么好办法吗?有比iframe更好的解决方案吗 以下是我目前的代码: <script> $(document).ready(function() { var link = $('.generate-pdf'); link.click(function

我正在尝试获取一个文件,它需要几秒钟的时间在后台加载,这样我就可以同时显示一个微调器

我目前正在尝试在后台使用iframe,这是可行的,但我不确定加载完成后如何通知我(这样我就可以删除微调器)

有什么好办法吗?有比iframe更好的解决方案吗

以下是我目前的代码:

<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上是这样。