Javascript 尝试使用延迟对象和$。何时进行多个AJAX调用

Javascript 尝试使用延迟对象和$。何时进行多个AJAX调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,基于这篇关于Medium()的教程,我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获得结果 这是我正在做的代码 function updateAllGoingButtons(){ var dataToPass = {}; var deferreds = []; $('.btn-group').find('button').each(function(){ console.log($(this).attr

因此,基于这篇关于Medium()的教程,我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获得结果

这是我正在做的代码

function updateAllGoingButtons(){
    var dataToPass = {};
    var deferreds = [];

    $('.btn-group').find('button').each(function(){
       console.log($(this).attr('id'));
       dataToPass.button = $(this).attr('id');
       var ajax = $.ajax({
          url: '/update-buttons',
          method: 'post',
          data: dataToPass,
          dataType:'json'
       });

       deferreds.push(ajax);

       $.when.apply($, deferreds).then(function(){

       });
    });
}
我对如何使用$.when函数以及在哪里可以访问返回到ajax调用的数据感到困惑


我尝试插入一个简单的成功选项,但它没有进入回调函数。我该怎么做

你只是在打电话给
太早了。在开始所有ajax调用并在阵列中得到它们的承诺后,在
每个
循环之外执行

function updateAllGoingButtons(){
    var dataToPass = {};
    var deferreds = [];

    $('.btn-group').find('button').each(function(){
       console.log($(this).attr('id'));
       dataToPass.button = $(this).attr('id');
       var ajax = $.ajax({
          url: '/update-buttons',
          method: 'post',
          data: dataToPass,
          dataType:'json'
       });

       deferreds.push(ajax);

    });

    $.when.apply($, deferreds).then(function(){     // <=== Moved this
                                                    // <===
    });                                             // <===
}

好的,但我仍然不知道如何从$.when方法内部访问传递回AJAX调用的数据!我该怎么做?当我试图从该方法内部控制台.log(deferreds)时,我没有得到任何输出。@ZaidHumayun:如中所述:“传递给doneCallbacks的参数为每个deferreds提供解析值,并与传递给jQuery.When()的deferreds的顺序相匹配”(后面是一个示例;在该页面上搜索“pizza”). 基本上:结果是回调的离散参数。我似乎误解了这一点。在文档中,延迟对象看起来是显式解析的,而我只是使用res.send返回数据。我的案子还有效吗?因为我尝试传递参数并将它们记录在then回调中,但没有成功<代码>$.when.apply($,延迟)。然后(函数(a,b,c,d,e){console.log(a);console.log(b);console.log(c);console.log(d);})@ZaidHumayun:是的。在那个例子中,他们正在创建和解析延迟,但在您的用例中,您正在使用由
ajax
@ZaidHumayun创建和解析的延迟:是的,如果调用都成功,您应该从那些console.log语句中看到一些东西;我知道:听起来好像至少有一个电话出错了。由于您没有将第二个函数传递给
然后
,因此不会收到错误通知。注意,在ajax的情况下,每个结果都是一个包含三个条目的数组(对应于通常会得到的三个参数
success
,因此您通常需要
[0]
)。
$.when.apply($, deferreds).then(
    function() {
        var n;
        for (n = 0; n < arguments.length; ++n) {
             console.log("Result " + n, arguments[n][0]);
        }
    },
    function() {
        // At least one request failed
    }
);