2012-08-22 29 views
2

我正在處理未知數量的ajax請求。該請求可能在404失敗。這導致整個鏈失敗。一個延遲失敗後還有辦法繼續嗎?

一個延遲失敗後還有辦法繼續嗎?

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 
}); 
+3

不與$ .when,當一個失敗,他們都失敗。儘管你可以創建自己的延期對象。 –

回答

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); 
}); 

在這種情況下,您的延期將始終得到解決。

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();