JS例1
這個代碼假定要中止其他請求如果任何一個請求失敗(通過404或500響應,或超時),並且不需要以評估數據響應以確定業務邏輯故障場景。 $.when()
的方法將解決其主一旦延遲,因爲所有 Deferreds決心,或拒絕只要 Deferreds之一被拒絕延期的主人。
$.when(fireRequest(1), fireRequest(2),fireRequest(3))
.then(myAllSuccessfulFunc, oneFailedFunc);
function myAllSuccesfulFunc(req1,req2,req3){
//everything returned a 200.
alert("these are not the droids you are looking for");
};
function oneFailedFunc(req1,req2,req3){
//* each req looks like [ "not success", statusText, jqXHR ] */
//feel free to check what failed, but I don't know what you need
req1[2].abort();
req2[2].abort();
req3[2].abort();
};
JS例如2
你真正需要分析在響應數據請求成功,看看你失敗了,因爲從後端邏輯的其他請求。
var stop = 4;
//if you are sure fireRequest(x) returns a good promise object, do this:
callNext(fireRequest(1),1);
function callNext(promise, currentIndex){
promise.done(function(ajaxArgs){
var jqXHR = ajaxArgs[2];
//replace this with some logic check that makes sense to your app
if(/error/.test(jqXHR.responseText)){
//do something
}else if(currentIndex <stop){
callNext(fireRequest(currentIndex+1),currentIndex+1);
}).fail(function(ajaxArgs){
//server returned a 404, or a 500, or something not a success.
});
};
這聽起來可能很愚蠢,但爲什麼不把你的AJAX調用設置爲'async:false'(在AJAX中撤銷A)呢?或者我把你的問題弄錯了? – m90
如果我把'Async:false',它確實會和這裏的行爲一樣,但是當1失敗時我該如何停止請求?我覺得我的問題中的代碼更多地處於正確的軌道 – PoeHaH
您可以簡單地擁有一個包含您只需逐個處理的請求的數組。如果成功,你繼續下一個項目,如果通話失敗,你會中斷。儘管如此,非同步AJAX是毫無意義的,我同意。你有沒有看過* $。當*還沒有? – m90