尝试使用延迟对象和$ .when进行多个AJAX调用

时间:2016-10-17 15:59:56

标签: javascript jquery ajax

因此,基于Medium(https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f#.d7ymg99mp)的本教程,我试图使用延迟数组,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调用的数据的位置感到困惑。

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

1 个答案:

答案 0 :(得分:2)

您只是过早致电0000000000000000 <test>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 5d pop %rbp 5: c3 retq 0000000000000006 <main>: 6: 55 push %rbp 7: 48 89 e5 mov %rsp,%rbp a: b8 00 00 00 00 mov $0x0,%eax f: e8 00 00 00 00 callq 14 <main+0xe> 14: 5d pop %rbp 15: c3 retq 。在你开始所有的ajax调用并在数组中获得它们的承诺后,在<{strong>外部 when循环中执行此操作:

each

这些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 // <=== }); // <=== } 函数。每个参数都是一个包含三个条目的数组,对应于通常传递给then函数的三个参数。由于您正在处理数组,因此您可能希望通过success伪数组访问它们。拥有拒绝处理程序(arguments的第二个参数,或者使用then和最新版本的jQuery)也总是一个好主意:

catch