$.Deferred()
生成一個deferred對象。deferred.done(function(){})
指定操做成功時的回調函數deferred.fail(function(){})
指定操做失敗時的回調函數deferred.promise()
deferred.resolve()
手動改變deferred對象的運行狀態爲」已完成」,從而當即觸發done()方法。deferred.reject()
手動改變deferred對象的運行狀態變爲」已失敗」,從而當即觸發fail()方法。$.when()
爲多個操做指定回調函數。deferred.then()
有時爲了省事,能夠把done()和fail()合在一塊兒寫,這就是then()方法。$.when($.ajax("/main.php" )) .then(successFunc, failureFunc );
若是then()有兩個參數,那麼第一個參數是done()方法的回調函數,第二個參數是fail()方法的回調方法。若是then()只有一個參數,那麼等同於done()。
9. deferred.always()
這個方法也是用來指定回調函數的,它的做用是,無論調用的是deferred.resolve()
仍是deferred.reject()
,最後老是執行。php
jQuery規定deferred對象的三種執行狀態:未完成、已完成和已失敗。
var deferred = new $.Deferred(); //新建一個Deferred對象
若是執行狀態是」已完成」(resolved),deferred對象馬上調用done()方法指定的回調函數;
若是執行狀態是」已失敗」,調用fail()方法指定的回調函數;
若是執行狀態是」未完成」,則繼續等待,或者調用progress()方法指定的回調函數(jQuery1.7版本添加)。
其做用:在原來的deferred對象上返回Promise對象,後者只開放與改變執行狀態無關的方法(好比done()方法和fail()方法),
屏蔽與改變執行狀態有關的方法(好比resolve()方法和reject()方法),從而使得執行狀態不能被改變。ajax