使用setTimeout

时间:2015-10-07 18:42:09

标签: javascript php jquery

我知道不可能使用相同的窗口下载​​多个文件,因为HTTP不允许它。

但我设法使用下面的代码:

$('#test').on("click",function(e){
    window.location="getEmployeeInstructions.php"; 
    setTimeout(function(){ window.location="getMergedEmployeeReports.php"; }, 10000);
    setTimeout(function(){ window.location="getQualityHandbook.php"; }, 20000);
    setTimeout(function(){ window.location="getEquipmentReport.php"; }, 30000);   
    return false;
});

这不是一个非常干净或有用的方法,因为它需要在下一个下载之前完成每次下载。

所以我在想。有没有办法在下载文件时发出通知并启动下一个文件下载而不是使用setTimeout函数推迟每次下载?这样我至少可以通知用户进度并让他知道页面正在处理他的请求..

更新:如果我能够一次启动多次下载并且在上一个文件完成后不被强制启动下一次下载,则不需要通知我。

2 个答案:

答案 0 :(得分:1)

我今天刚刚解决了类似的任务。使用隐藏iframe的src属性。它的句柄文件下载没有更改父页面。并且这种方式不会被阻止为多重弹出窗口。

 <iframe id="downloader1" style="display:none"></iframe>
 <iframe id="downloader2" style="display:none"></iframe>
 <iframe id="downloader3" style="display:none"></iframe>

$('#test').on("click",function(e){
    $("#downloader1").attr("src", "file1.php");
    $("#downloader2").attr("src", "getQualityHandbook.php");
    $("#downloader3").attr("src", "getEquipmentReport.php"); 
    return false;
});

一个补充。当getQualityHandbook.php返回错误而不是文件时,您可能想要处理这种情况:

$('#downloader2').unbind().load( function()
    {//handle if not file received
        var data = $('#downloader2').contents().find('body ').html();
        alert(data);
    }); 

答案 1 :(得分:0)

public class Looper {
    public static void main(String args[])

    {
        for(int i = 0;i < args.length;++i){
            for(int j = 0;j < Integer.parseInt(args[i]);++j)
        {
            System.out.print("* ");
        }
            System.out.println("");
        }
    }
}