在将其标记为重复之前,我已经查看了有关stackoverflow的几篇文章,但他们似乎没有回答我的问题。
我正在构建一个带有api的插件,该API使用http请求进行调用。我有一个主循环,它执行多次,其中有多个不同的AJAX请求。所有请求完成后,我需要能够执行代码。
我遇到的主要问题是,在到达$.when
函数时,持有所有promise对象的数组为空或大部分为空,导致代码在所有内容完成之前触发。
以下是代码的基本简化概述:
var xhrs = [];
var xhr = null;
$.each(array, function(index, el) {
// Step 1
xhr = ajaxCall.success(function() {
xhr = ajaxCall2();
xhrs.push(xhr);
});
xhrs.push(xhr);
// Step 2
xhr = $.getJSON(params, function() {
//...stuff...
// Step 3
var xhrs2 = [];
$.each(function() {
xhr = ajaxCall3();
xhrs.push(xhr);
xhrs2.push(xhr);
});
// Step 4
xhr = ajaxCall4().success(function() {
xhr = ajaxCall5().success(function() {
//....
});
xhrs.push(xhr);
});
xhrs.push(xhr);
// Step 5
$.when(xhrs2).then(function() {
$.each(function() {
xhr = ajaxCall5();
xhrs.push(xhr);
});
});
});
xhrs.push(xhr);
});
$.when.apply($, xhrs).then(function() {
// Run when all ajax calls completed
});
我试过把它移到不同的地方,没有运气。有什么想法吗?
答案 0 :(得分:1)
$.when
函数将每个XHR作为参数,然后您可以在then
的{{1}}中进行响应。每个响应都作为单独的参数传递。
when
答案 1 :(得分:-3)
您是否尝试过让每个请求同步? jquery中的简单同步请求如下所示:
jQuery.ajax({
url: 'http://example.com' ,
success: function(result) {
//Do stuff with result
},
async: false
});