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

时间:2016-03-13 23:17:00

标签: javascript jquery arrays ajax jquery-deferred

我有一个特殊的ajax场景,我无法绕过头脑。

这是我正在努力协调的一系列事件:

  1. 单个请求返回一个id号数组。
  2. 对于每个id,将发送一个新请求。
  3. 当所有这些请求都返回后,他们的数据将被收集并呈现。
  4. 看起来很简单,但我无法弄清楚如何表达它。

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

    我知道我需要$ .when()。apply()来观察响应数组。

    我想也许我需要一个延迟对象,不知何故代表数组,但我无法弄清楚如何表达这个。

1 个答案:

答案 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...
        });
    }
});