JQuery when() done() then()


jQuery.when(deferreds)

參數deferreds,一個或多個延時對象或JS對象,我們初略的認為它就是一個或多個異步請求。

 

例如:$.when($.ajax("page1.php"), $.ajax("page2.php"))  

 

when()函數常常和done()函數、fail()函數、then()函數聯合使用:
done(Function func) - 當deferreds中的處理都完成的時候執行Function回調函數
fail(Function func) - 當 deferreds中有一個處理失敗的時候執行Function回調函數
then(Function func1,Function func2)- 結合了done和fail函數,當都成功執行func1,當有一個失敗執行func2

 

  1. var whenResult = $.when($.ajax("page1.php"), $.ajax("page2.php"));  
  2. whenResult.done(function(a1,a2){  
  3. //函數內容略  
  4. //a1和a2倆參數是when函數中兩個ajax請求的相關jqXHR對象  
  5. });  
  6. whenResult.fail(function(){  
  7. //函數內容略  
  8. })  
  9. 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) ) {

alert( "First page has 'Whip It' somewhere." );

  }

});

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

 $.when($.ajax("/page1.php"), $.ajax("/page2.php"))

.then(myFunc, myFailure);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM