我有一个特殊的 ajax 场景,我无法理解它。
这是我试图协调的事件顺序:
- 单个请求会返回 ID 号数组。
- 对于每个 ID,都会发送一个新请求。
- 当所有这些请求返回后,系统会收集并呈现它们的数据。
看起来很简单,但我不知道如何表达。
我对链接延迟对象的理解是,它们都是立即实例化的,然后数据在解析时流过它们。但是,当其中一项是数组(大小可能为零)时,这是如何工作的呢?
我知道我需要 $.when().apply() 来观察传入的响应数组。
我想也许我需要一个延迟对象以某种方式代替数组,但我不知道如何表达这一点。
最佳答案
老实说,这听起来是一个不好的模式,因为您有 N+1 个请求全部被触发。如果阵列中有大量项目和/或大量用户,您最终可能会对自己的服务器进行 DDOS。
因此,最好更改第 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...
});
}
});
关于javascript - 来自单个请求的 ajax 请求数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977116/