当多个Ajax请求之一失败时,Done方法不起作用

时间:2018-12-01 20:15:37

标签: jquery ajax deferred .when

我连续进行了多个Ajax调用后出局,并且在所有请求结束后再执行其他操作。

第一轮工作正常,因为所有请求均返回成功200 。但是,由于某些Ajax调用无法响应(它们给出404),因此第二轮在此处无法输入done()方法。假设调用ajaxCall(url5)通过输入自己的错误函数而失败。

但是,我仍然想在done()方法中调用一个方法,以便可以利用从成功调用中获得的响应。

有任何想法为什么当一个调用失败时,done()不起作用?或者如何确保在进行所有调用时无论状态是成功还是错误,我都能在正确的位置上?

function ajaxCall(endpoint){        
  return $.ajax({
    url: endpoint, 
    cache: false,
    error: function (xhr, ajaxOptions, thrownError) {          
      console.log("404");    
    },
    success: function(response) {
      result = $(response).find("#boxContent");       
      $(".boxContainer").append(result[0].innerHTML);     
    }
  });   
}

$.when(ajaxCall(url1),
       ajaxCall(url2),
       ajaxCall(url3),
       ajaxCall(url4),
       ajaxCall(url5)).then(function(){
  console.log("All requests issued.");
}, function() {      
  console.log("One of the sources is not available*****************"); 
  hasAnyFailed = true;
}).done(function( a1, a2, a3, a4, a5){      
  // When all calls return
  console.log("DONE*********);   
  doSomethingElse();
});  

PS:我找到了这种SO解决方案,但不确定是否有像内置JS方法这样的更新解决方案。 https://stackoverflow.com/a/7881733/2790804

0 个答案:

没有答案