发出一系列(n) AJAX调用结束的信号
Signal the end of a series of (n) AJAX calls
我有一个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接口。
相关文章:
- 在另一个函数成功结束后调用该函数
- 在动画结束之前调用函数
- settimeout调用的函数未结束
- 函数1结束后,JavaScript调用函数2
- Javascript渲染.如何编写Javascript;t在函数调用结束之前继续执行代码
- 在源节点上调用 stop() 是否会触发已结束的事件
- 在 html5 视频结束时调用 AngularJS 控制器函数
- addclass循环结束时调用函数
- 如何在js中等待http调用结束
- 强制Chrome检查$.Ajax调用结束
- Node.js AWS S3上传从不调用结束函数
- 事件调用结束时/ JavaScript
- 如何在getjson调用结束时显示数组内容
- Jquery 2.1 -等待两个ajax调用结束,然后销毁元素
- JavaScript:在另一个函数调用结束后继续执行函数
- 如何等待一个ajax调用结束进行另一个ajax调用循环
- Angular DTOptionsBuilder ajax调用结束时是否有回调?
- Angularjs/jQuery: ajax调用结束后改变表格的宽度
- Ajax调用在IE和Chrome中有效(仅在Firefox中,当在Ajax调用结束时以调试模式添加断点时)
- 发出一系列(n) AJAX调用结束的信号