首頁  >  工具  > $.when(deferreds)

返回值: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您可能會(huì)設(shè)置是永遠(yuǎn)不會(huì)被調(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);