1 deferred對象
deferred對象是jQuery的回調函數解決方案,它是從jQuery1.5.0版本開始引入的功能
deferred對象的方法
(1) $.Deferred() 生成一個deferred對象。
(2) deferred.done() 指定操作成功時的回調函數
(3) deferred.fail() 指定操作失敗時的回調函數
(4) deferred.promise() 沒有參數時,返回一個新的deferred對象,該對象的運行狀態無法被改變;接受參數時,作用為在參數對象上部署deferred接口。
(5) deferred.resolve() 手動改變deferred對象的運行狀態為"已完成",從而立即觸發done()方法。
(6)deferred.reject() 這個方法與deferred.resolve()正好相反,調用后將deferred對象的運行狀態變為"已失敗",從而立即觸發fail()方法
(7) $.when() 為多個操作指定回調函數。
除了這些方法以外,deferred對象還有二個重要方法,上面的教程中沒有涉及到。
(8)deferred.then()
有時為了省事,可以把done()和fail()合在一起寫,這就是then()方法。
$.when($.ajax( "/main.php" )) .then(successFunc, failureFunc );
如果then()有兩個參數,那么第一個參數是done()方法的回調函數,第二個參數是fail()方法的回調方法。如果then()只有一個參數,那么等同于done()。
(9)deferred.always()
這個方法也是用來指定回調函數的,它的作用是,不管調用的是deferred.resolve()還是deferred.reject(),最后總是執行。
$.ajax( "test.html" ).always( function() { alert("已執行!");} );來點兒
1)ajax操作的鏈式寫法
先回顧一下jQuery的ajax操作的傳統寫法:
$.ajax({ url: "test.html", success: function(){ alert("哈哈,成功了!"); }, error:function(){ alert("出錯啦!"); } });在上面的代碼中,$.ajax()接受一個對象參數,這個對象包含兩個方法:success方法指定操作成功后的回調函數,error方法指定操作失敗后的回調函數。
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR對象,你沒法進行鏈式操作;如果高于1.5.0版本,返回的是deferred對象,可以進行鏈式操作。
有了deferred對象之后,可以這樣寫了
$.ajax("test.html") .done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出錯啦!"); });上面代碼中的done()相當于success方法,fail()相當于error方法。采用鏈式寫法以后,代碼的可讀性大大提高。
2)指定同一操作的多個回調函數
deferred對象的一大好處,就是它允許你自由添加多個回調函數。
還是以上面的代碼為例,如果ajax操作成功后,除了原來的回調函數,我還想再運行一個回調函數,怎么辦?
新聞熱點
疑難解答
圖片精選