我有一个特殊的ajax场景,我无法绕过头脑。
这是我正在努力协调的一系列事件:
看起来很简单,但我无法弄清楚如何表达它。
我对链接延迟对象的理解是它们都是立即实例化的,然后数据在解析时流经它们。但是当其中一个项目是一个数组时,它是如何工作的,可能是零大小?
我知道我需要$ .when()。apply()来观察响应数组。
我想也许我需要一个延迟对象,不知何故代表数组,但我无法弄清楚如何表达这个。
答案 0 :(得分:3)
老实说,这听起来像是一个糟糕的模式,因为你有N + 1个请求全部被解雇。如果阵列中有很多项目和/或许多用户,您最终可能会使用自己的服务器。
因此,最好更改点2,以便在单个请求中发送所有ID,甚至更改点1以返回具有给定ID的元素中的所有必需数据。
话虽如此,您可以通过将jQuery的AJAX方法返回的promise保存到数组然后将其应用于$.when()
来实现您的要求,如下所示:
$.ajax({
url: '/endpoint1',
data: { foo: 'bar' },
success: function(data) {
var requests = [];
for (var i = 0; i < data.ids.length; i++) {
requests.push(
$.ajax({
url: '/endpoint2'
data: { id: data.ids[i] }
})
);
}
$.when.apply($, requests).done(function() {
// do something when all AJAX requests have completed here...
});
}
});