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

返回值:Deferred jQuery.when(deferreds)

概述

提供一種方法來執行一個或多個對象的回撥函式,延遲對像通常表示非同步事件。

如果單一延遲傳遞給jQuery.when ,它是通過這個方法和延遲對像附加的其他方法可訪問繫結的回撥函式返回的,如 defered.then  。當延遲得到解決或者拒絕,通常的程式碼建立了原來的延遲,適當的回撥將被呼叫。例如,jqXHR對像返回jQuery.ajax是一個延期,可以用這種方式:


$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){ 
     alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});

如果一個參數被傳遞給jQuery.when ,這不是延遲,這將被視為延遲解決,並立即將執行附加任何doneCallbacks。該doneCallbacks傳遞原始的參數。在這種情況下,任何failCallbacks您可能會設定是永遠不會被呼叫,因為延遲從不拒絕。

例如:


$.when( { testing: 123 } ).done(
   function(x){ alert(x.testing); } /* alerts "123" */
);

在案例中有多個延遲對像傳遞jQuery.when ,該方法返回一個新的「宿主」延遲對象,跟蹤所有已通過Deferreds聚集狀態。該方法能夠解決它的「宿主」延遲儘快解決所有延遲,或拒絕儘快將被拒絕的延遲。如果「宿主」延遲得到解決,它是通過傳遞給解析值,所有的延遲 jQuery.when 。例如,當延遲是jQuery.ajax()請求,參數將是jqXHR對象的要求,以便他們在名單內的說法。

在多延遲情況下,如果延遲一被拒絕,jQuery.when火災立即掌握其推遲failCallbacks。請注意,延遲一些可能仍然在這一點沒有得到解決。如果您需要執行額外的處理對於這種情況,如取消任何未完成的Ajax請求,你可以保持基本jqXHR引用對像在封閉和檢查/取消在failCallback他們。

參數

deferreds V1.5

一個或多個延遲對象,或者普通的JavaScript對象。

示例

描述:

執行Ajax請求后兩個函式是成功的。(見jQuery.ajax()對於一個成功的和錯誤的案件為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.");
   }
});

執行函式myfunc當兩個Ajax請求是成功的,如果任一或myFailure有一個錯誤。

jQuery 程式碼:

$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
  .then(myFunc, myFailure);