返回值:DeferredjQuery.when(deferreds)
jQuery $.when() 方法概述
提供一種方法來執(zhí)行一個(gè)或多個(gè)對象的回調(diào)函數(shù),延遲對象通常表示異步事件。
如果單一延遲傳遞給jQuery.when ,它是通過這個(gè)方法和延遲對象附加的其他方法可訪問綁定的回調(diào)函數(shù)返回的,如defered.then 。當(dāng)延遲得到解決或者拒絕,通常的代碼創(chuàng)建了原來的延遲,適當(dāng)?shù)幕卣{(diào)將被調(diào)用。例如,jqXHR對象返回jQuery.ajax是一個(gè)延期,可以用這種方式:
$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){
alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});
如果一個(gè)參數(shù)被傳遞給jQuery.when ,這不是延遲,這將被視為延遲解決,并立即將執(zhí)行附加任何doneCallbacks。該doneCallbacks傳遞原始的參數(shù)。在這種情況下,任何failCallbacks您可能會設(shè)置是永遠(yuǎn)不會被調(diào)用,因?yàn)檠舆t從不拒絕。
例如:
$.when( { testing: 123 } ).done(
function(x){ alert(x.testing); } /* alerts "123" */
);
在案例中有多個(gè)延遲對象傳遞jQuery.when ,該方法返回一個(gè)新的“宿主”延遲對象,跟蹤所有已通過Deferreds聚集狀態(tài)。該方法能夠解決它的“宿主”延遲盡快解決所有延遲,或拒絕盡快將被拒絕的延遲。如果“宿主”延遲得到解決,它是通過傳遞給解析值,所有的延遲 jQuery.when 。例如,當(dāng)延遲是jQuery.ajax()請求,參數(shù)將是jqXHR對象的要求,以便他們在名單內(nèi)的說法。
在多延遲情況下,如果延遲一被拒絕,jQuery.when火災(zāi)立即掌握其推遲failCallbacks。請注意,延遲一些可能仍然在這一點(diǎn)沒有得到解決。如果您需要執(zhí)行額外的處理對于這種情況,如取消任何未完成的Ajax請求,你可以保持基本jqXHR引用對象在封閉和檢查/取消在failCallback他們。
參數(shù)
deferredsV1.5
一個(gè)或多個(gè)延遲對象,或者普通的JavaScript對象。
示例
描述:
執(zhí)行Ajax請求后兩個(gè)函數(shù)是成功的。(見jQuery.ajax()對于一個(gè)成功的和錯(cuò)誤的案件為AJAX請求的完整描述文檔)。
jQuery 代碼:
$.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) ) {
alert("First page has 'Whip It' somewhere.");
}
});
執(zhí)行函數(shù)myfunc當(dāng)兩個(gè)Ajax請求是成功的,如果任一或myFailure有一個(gè)錯(cuò)誤。
jQuery 代碼:
$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
.then(myFunc, myFailure);