将多个ajax调用捆绑到jQuery.when()时如何处理错误?

时间:2012-03-06 08:12:54

标签: jquery ajax

我想等待多个AJAX调用而不将回调嵌套在另一个内部。

this文档中,我了解可以使用jQuery.when()

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
    /* a1 and a2 are arguments resolved for the 
        page1 and page2 ajax requests, respectively */
   var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
   if ( /Whip It/.test(jqXHR.responseText) ) {
      alert("First page has 'Whip It' somewhere.");
   }
});

但是,从提供的示例中,我不明白如何处理错误。在正常的jquery.ajax通话中,我在选项中提供了error回调。

理想情况下,当至少有一个ajax调用导致错误时,我想要的是调用提供的错误回调。

1 个答案:

答案 0 :(得分:0)

正确的做法是将then链接到when,而不是done

例如:

$.when(
   $.ajax("/page1.php", {
    error: function(jqXHR, textStatus, errorThrown){
      // handle the error for this specific call
    },
    success: function(data, textStatus, jqXHR){
      // handle the success for this specific call
    }
   }), 
   $.ajax("/page2.php"), {
    error: function(jqXHR, textStatus, errorThrown){
      // handle the error for this specific call
    },
    success: function(data, textStatus, jqXHR){
      // handle the success for this specific call
    }
   }).then(
   function(){
     // all calls succeeded
   },
   function(){
     // at least one of the calls failed
   }
});