2

不明な数のajaxリクエストを処理しています。リクエストは404で失敗する可能性があります。これにより、チェーン全体が失敗します。

1つの延期が失敗した後に続行する方法はありますか?

var deferreds = [];
// fill deferreds with a number of ajax requests.
$.when.apply($, deferreds)
 .done(function(){
     // handle done
 }).fail(function(){
     // handle fail
     // would like to fix/resolve the failed deferred and continue with the rest
 });
4

2 に答える 2

2

他の遅延オブジェクトが成功または失敗するのを待って、独自の遅延オブジェクトを作成する必要があります。

var myDeferred = $.Deferred();
var origDeferred = $.ajax(...);
// if request is ok, i resolve my deferred
origDeferred.done(function() {
  myDeferred.resolve.apply(this, arguments);
});
// if request failed, i also resolve my deferred
origDeferred.fail(function() {
  myDeferred.resolve.apply(this, arguments);
});

その場合、延期は常に解決されます。

于 2012-09-06T12:22:51.010 に答える
0

このようにしてみませんか!

var defArr = []; // Array of Deferreds

var recur = function(){
  $.when.apply($, defArr).done(function(){
    // Only do what event, when all are done, fail or resolved
    $.get("/media.php?i=done");
  }).fail(function(oDef){
    // Remove fail def from defArr
    defArr.splice(defArr.indexOf(oDef), 1)
    // do it again with all defArr into $.when
    recur();
  });
}

recur();
于 2016-06-17T02:42:25.233 に答える