javascript - 来自单个请求的 ajax 请求数组

标签 javascript jquery arrays ajax jquery-deferred

我有一个特殊的 ajax 场景,我无法理解它。

这是我试图协调的事件顺序:

  1. 单个请求会返回 ID 号数组。
  2. 对于每个 ID,都会发送一个新请求。
  3. 当所有这些请求返回后,系统会收集并呈现它们的数据。

看起来很简单,但我不知道如何表达。

我对链接延迟对象的理解是,它们都是立即实例化的,然后数据在解析时流过它们。但是,当其中一项是数组(大小可能为零)时,这是如何工作的呢?

我知道我需要 $.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/

相关文章:

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - trim 电子邮件地址中的点

Javascript 原型(prototype) - 不仅适用于实例对象?

javascript - 使用 Snap SVG 将 SVG 加载到特定的 div

javascript - 如何使用javascript OR运算符?

objective-c - Objective-C 中的静态数组

javascript - 在下拉列表中显示数组

javascript - 如何将 Darknet 标签文件转换为常规 x,y,w,h?

javascript - 注入(inject) html 时 jQuery 事件不起作用

javascript - 如何从 jQuery Ajax 访问 JSON 元素