jQuery.when(deferreds)
參數deferreds,一個或多個延時對象或JS對象,我們初略的認為它就是一個或多個異步請求。
例如:$.when($.ajax("page1.php"), $.ajax("page2.php"))
- var whenResult = $.when($.ajax("page1.php"), $.ajax("page2.php"));
- whenResult.done(function(a1,a2){
- //函數內容略
- //a1和a2倆參數是when函數中兩個ajax請求的相關jqXHR對象
- });
- whenResult.fail(function(){
- //函數內容略
- })
- whenResult.then(successFunc,failureFunc);
如果沒有參數傳遞給 jQuery.when(),它會返回一個resolved狀態的Promise。
如果向 jQuery.when() 傳入一個單獨的延遲對象,那么會返回它的 Promise 對象(延遲方法的一個子集)。可以繼續綁定 Promise 對象的其它方法,例如, defered.then 。當延遲對象已經被解決(resolved)或被拒絕(rejected)(通常是由創建延遲對象的最初代碼執行的),那么就會調用適當的回調函數。例如,由 jQuery.ajax() 返回的 jqXHR 對象是一並立的延遲對象並且可以像下面這樣使用:
$.when( $.ajax("test.aspx") ).then(function(data, textStatus, jqXHR){
alert( jqXHR.status ); // alerts 200
});
在多延遲情況下,如果Deferreds延遲對象一被拒絕(rejected),jQuery.when()觸發立即調用 “宿主” Deferred(延遲)對象的 failCallbacks。請注意在這個時間點上,有一些延遲對象仍然可以是未解決(unresolved)的。 傳遞給failCallbacks的參數匹配Deferred(延遲)對象的 failCallbacks被 rejected 拒絕的順序。那么,在這種情況下,如果需要執行一些額外的處理,例如,取消所有未完成的 ajax 請求,你可以在閉包中進行保持 jqXHR 對象的引用,並且在 failCallback 中檢查或取消它們。
例子:
Example: 執行Ajax請求后兩個函數是成功的。
$.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) ) {
}
});Example: 執行函數myFunc當兩個Ajax請求是成功的,如果任一或myFailure有一個錯誤。
$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
.then(myFunc, myFailure);
