jQuery -当所有Ajax请求完成时执行一些操作
jQuery - Do something when all Ajax requests are done
我嵌套了for
-循环和对外部URL的Ajax调用。我想用承诺,却不知道该把它放在哪里。在我输出problemHost
之前,我需要确保所有的$.getJSON
-请求都已经完成。
for (var i = 0; i < hosts.length; i++) {
var obj = hosts[i];
for (var key in obj) {
var attrName = key;
var attrValue = obj[key];
host = obj[key];
console.log(host);
$.getJSON('http://myURL/get/', {
uid: host + "." + domain,
last: 1
}, function(data) {
json = data;
for (var i = 0; i < json.length; i++) {
var obj = json[i];
for (var key in obj) {
var attrName = key;
var attrValue = obj[key];
if (key.includes("JFSFILE_")) {
var newkey = key.replace("JFSFILE_", "");
console.log(newkey + " " + obj[key]);
if (parseFloat(obj[key]) > 20) {
if (typeof problemHost[host] == 'undefined') {
problemHost[host] = {};
}
problemHost[host][newkey] = obj[key];
}
}
}
}
});
}
}
在所有 Ajax调用完成之前,不应该执行:
if (problemHost.length > 0) {
console.log(problemHost);
}
我把承诺放在哪里?这是解决问题的最好方法吗?
您可以计算已经发出了多少请求,并且由于您知道总共需要做多少,您可以这样做:
var reqs_done = 0;
for(var i = 0; i < hosts.length; i++)
{
// ...
$.getJSON(...).done(function()
{
reqs_done++;
if(reqs_done == hosts.length)
{
// Code when all requests are done ...
}
}
}
注意,您还应该检查生产环境中的.fail
。
相关文章:
- 如何在自动完成时设置属性标题
- Adobe Edge:动画完成时添加onComplete处理程序
- 当一些事情可以通过JS或CSS完成时,我应该选择哪种方式
- 在操作完成时执行函数
- 当 document.ready 中的函数完成时执行 js 函数
- 当一系列 jquery ajax 调用完成时执行一个函数(!)
- 创建一个超链接(或按钮),用于执行 python 脚本,然后在脚本完成时重定向
- 在上一个函数完成时执行 JavaScript 函数
- 如何在 knex 事务完成时执行操作
- 在函数完成时执行代码
- 如何限制keypress/keyup/keydown操作并仅在ajax调用完成时执行
- AJAX调用未完成时停止执行JS函数
- jQuery -当所有Ajax请求完成时执行一些操作
- 如何调用一个函数时,一个函数执行完成?——Javascript
- 只有当另一个javascript/jquery完成时才执行函数
- 是否有一种方法可以在承诺完成时独立于结果执行一些代码
- 如何仅在前一个单击完成时执行下一个单击
- Jquery:在一个函数完成时执行另一个函数
- 当嵌套异步函数完成时执行某些操作
- 当所有异步处理程序完成时执行javascript函数