从'#34; done"中的$ .gets数组中删除$ .get

时间:2015-10-19 14:52:16

标签: jquery arrays ajax

我的问题是我需要检测$.get何时完成,然后从全局var ajaxGets中删除自己,并检测ajaxGets变量何时为空,这样我就可以隐藏我的加载 - 图像。

该页面使用了几个ajax获取。一些独立于用户输入的后台运行,其余的是基于输入的具体获取。

因此,虽然我在$.get循环中运行了setTimeout做了自己的事情,但还有其他几个,而不是像下面这样的链接,我需要跟踪。

//psudo
$.get(".....", success(){
    $.get("...", success() {
        $.get("...")...
    }
}

我将它们链接起来,以便按特定顺序获取数据异步。

用户选中几个复选框并点击"更新"并$.get开始。

如果用户点击"更新"当$.gets正在进行中时,我认为我可以通过做类似的事来阻止$.gets的链条

var ajaxGets = []

var req1 = $.get(".....", success(){
    var req2 = $.get("...", success() {
        var req3 = $.get("...", success(){

        })
        ajaxGets.push(req3)
    })
    ajaxGets.push(req2)
})
ajaxGets.push(req1)

然后在我的click内部获取更新按钮我将中止所有$.gets并重置包含它们的全局变量,然后再开始$.get的新查询小号

    for (var g in ajaxGets) {
        ajaxGets[g].abort();
    }

    ajaxGets = [];

这很有效。没问题。

但是当$.get完成后,如何从var ajaxGets数组中删除特定的$.get,这样我就可以知道数组是否为空(所有ajax都获得在数组中失败或成功)?

请询问是否有任何不清楚

1 个答案:

答案 0 :(得分:1)

您希望使用apply()$.when()来确定所有请求何时完成。

var ajaxGets = [...]; //your array of get requests 
$.when.apply($, ajaxGets).then(function() {
    alert('all gets complete!');
});