返回值:DeferredjQuery.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他們。

參數

deferredsV1.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);