发出一系列(n) AJAX调用结束的信号

Signal the end of a series of (n) AJAX calls

本文关键字:调用 结束 信号 AJAX 一系列      更新时间:2023-09-26

我有一个web应用程序,它在CMS中抓取网站并查找某种类型的数据。

它的工作原理很像递归的文件/目录循环:

//pseudo code
var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
recursiveSiteSearch(rootWeb);
function recursiveSiteSearch(webSite) {
   //Get all content of a certain type and add to objectThatHoldsAllResults
   //Get all SubSites and throw them into a loop that runs recursiveSiteSearch
}

此应用程序位于云中,并且不知道每个访问它的CMS中有多少个子站点。

每次循环获得某种类型的所有内容时,它都会对网站进行AJAX调用。

我需要知道递归何时完成,但不知道如何做到这一点

直接地说,当执行到recursiveSiteSearch(rootWeb);后面的语句时,递归将结束。

然而,recursiveSiteSearch内的异步性(ajax)可能/将(?)意味着一些潜在的活动仍然存在。

因此,您似乎需要一种机制来检测何时所有承诺(即。所有在递归中发起的ajax请求都完成了。

jQuery,提供了这样的机制。

伪代码:

function recursiveSiteSearch(webSite) {
    //Get all content of a certain type and add to objectThatHoldsAllResults
    //Get all SubSites and throw them into a loop that runs recursiveSiteSearch
    //Within the loop, push jqXHR objects onto the externally declared `promises` array.
}
var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
var promises = [];
recursiveSiteSearch(rootWeb);
jQuery.when.apply(jQuery, promises).done(function() {
    //statements here will execute when 
    //recursion has finished and all ajax 
    //requests have completed.
});

这样做的原因是jqXHR对象(由jQuery.ajax()和它的速记形式返回)实现了jQuery的Promise接口。