原文:hhtps:
1.什麼是deferred物件
deferred物件是乙個延遲物件,意思是函式延遲到某個點才開始執行,改變執行狀態的方法有兩個(成功:resolve和失敗:reject),分別對應兩種執行**(成功**函式:done和失敗**函式fail)
2.deferred物件使用示例
ajax方式其實是deferred物件
1)普通的ajax操作
$.ajax(,success,error函式在請求url響應後才開始執行error: function ()
});
2)1.5版本後新的寫法
$.ajax("index.html")新的寫法可以自由新增多個**函式,按新增的順序執行。.done(function () )
.fail(function () )
.done(function () );
3)為多個ajax執行**函式
$.when($.ajax("index.html"), $.ajax("addorder2.html"))只有兩個ajax都請求成功,才會執行done函式.done(function () )
.fail(function () )
4)為普通方法指定**函式
var wait=function();wait不是乙個deferred物件,執行後沒有等待wait()函式執行結果,先執行**函式了。settimeout(tasks,5000);
};$.when(wait())
.done(function())
.fail(function());
加入deferred物件,**示例如下:
var dtd=$.deferred();其中$.when()中的引數必須是個deferred物件,var wait=function(dtd);
settimeout(tasks,5000);
return dtd;
};$.when(wait(dtd))
.done(function())
.fail(function());
dtd.resolve();改變執行狀態為成功,呼叫done**函式。
dtd.reject();改變執行狀態為失敗,呼叫fail**函式。
5)deferred物件的promise()方法
上例中,定義了乙個全域性的deferred物件,在deferred物件wait外部也可以呼叫改變執行狀態函式。
deferred物件呼叫promise()方法後,就只能執行**函式(done,fail)了,不能執行狀態改變函式(resolve,reject)
**示例如下:
var wait=function();since thesettimeout(tasks,5000);
return dtd.promise();
};var d=wait();
d.resolve();//執行執行狀態改變函式resolve不起任何作用!
$.when(d)
.done(function())
.fail(function());
jquery.get
method returns a jqxhr object, which is derived from a deferred object, we can attach handlers using the.then
method.12
3456
7$.get( "test.php" ).then(
function() , function()
);
filter the resolve value:12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
deferred.then demotitle>
JQuery的deferred物件學習總結
什麼是deferred?可以幫助我們按規定的順序執行函式,比如說我們ajax請求資料之後,對dom進行資料填充,那我們就要先執行完ajax,拿到資料之後才能進行dom資料填充,所以這就是乙個順序執行的過程,傳統的做法是事先定義好 函式,當檢測到資料請求完成時,執行事先定義的 函式。但是,在 函式方面...
jQuery的deferred物件狀態還原
jquery的deferred物件的使用可以參考阮一峰的jquery的deferred物件詳解 js模組化開發時用到requirejs載入js,有兩個模組a和b,require a require b b依賴a,b中要使用a中非同步從後台載入的資料,想到了jquery的deferred物件,a中返回...
JS執行順序 (deferred 延遲佇列)
出現問題 函式功能 訪問資料庫函式 判斷資料是否為空 如果為空,則執行alert語句 後面省略 此執行結果為a b,原因是訪問資料庫比較慢,其他部分先執行。解決方法 var dtd deferred var wait function dtd settimeout tasks,0 return dt...