Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自单个请求的ajax请求数组_Javascript_Jquery_Arrays_Ajax_Jquery Deferred - Fatal编程技术网

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

Javascript 来自单个请求的ajax请求数组,javascript,jquery,arrays,ajax,jquery-deferred,Javascript,Jquery,Arrays,Ajax,Jquery Deferred,我有一个特殊的ajax场景,我简直无法理解 这是我试图协调的一系列事件: 单个请求返回一个id号数组 对于每个id,将发送一个新请求 当所有这些请求都返回后,将收集并呈现它们的数据 这似乎很简单,但我不知道如何表达它 我对链接延迟对象的理解是,它们都会立即实例化,然后在解析时数据会流经它们。但是,当其中一个项是一个数组(可能大小为零)时,这是如何工作的呢 我知道我需要$.when().apply()来观察响应数组 我想也许我需要一个延迟对象,以某种方式代表数组,但我不知道如何表达它 老实说,这听

我有一个特殊的ajax场景,我简直无法理解

这是我试图协调的一系列事件:

  • 单个请求返回一个id号数组
  • 对于每个id,将发送一个新请求
  • 当所有这些请求都返回后,将收集并呈现它们的数据 这似乎很简单,但我不知道如何表达它

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

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


    我想也许我需要一个延迟对象,以某种方式代表数组,但我不知道如何表达它

    老实说,这听起来像是一个糟糕的模式,因为您有N+1个请求都被激发。如果阵列中有大量项目和/或大量用户,则最终可能会使用自己的服务器

    因此,更好的做法是更改第2点,以便在单个请求中发送所有ID,甚至更改第1点,以从具有给定ID的元素返回所有必需的数据

    也就是说,您可以通过将jQuery的AJAX方法返回的承诺保存到一个数组中,然后将其应用到
    $来实现您的要求。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...
            });
        }
    });
    
    $.ajax({
    url:“/endpoint1”,
    数据:{foo:'bar'},
    成功:函数(数据){
    var请求=[];
    对于(var i=0;i
    谢谢!这非常有效,只做了一些小的更改,我想我对这个异步的东西有了更好的处理。我可以理解为什么这种安排是有问题的,但我一直使用一种有限的API。幸运的是,它只适用于少数内部用户,而且涉及的ID不应该超过十几个。没问题,很乐意提供帮助。为错误道歉。。。。很晚了;)很高兴你掌握了正确的语法。