詳解jQuery中的deferred對象的使用(一)
deferred對象是jQuery對Promises接口的實現(xiàn)。它是非同步操作的通用接口,可以被看作是一個等待完成的任務(wù),開發(fā)者通過一些通過的接口對其進行設(shè)置。事實上,它扮演代理人(proxy)的角色,將那些非同步操作包裝成具有某些統(tǒng)一特性的對象,典型例子就是Ajax操作、網(wǎng)頁動畫、web worker等等。
jQuery的所有Ajax操作函數(shù),默認(rèn)返回的就是一個deferred對象。
在jquery1.5之后的版本中,加入了一個deferred對象,也就是延遲對象,用來處理未來某一時間點發(fā)生的回調(diào)函數(shù)。同時,還改寫了ajax方法,現(xiàn)在的ajax方法返回的是一個deferred對象。
那就來看看deferred對象的用法。
1.ajax的鏈?zhǔn)交卣{(diào)
// ajax方法返回的是一個deferred對象,可以直接使用鏈?zhǔn)綄懛? $.ajax('test.json').done(function(resp){ // done 相當(dāng)于success回調(diào),其中默認(rèn)的參數(shù)為success回調(diào)的參數(shù) alert('success'); }).fail(function(){ // fail 相當(dāng)于error回調(diào) alert('error'); });
還可以同時寫多個回調(diào),會按照順序依次執(zhí)行
$.ajax('test.json').done(function(resp){ // done 相當(dāng)于success回調(diào),其中默認(rèn)的參數(shù)為success回調(diào)的參數(shù) alert('success'); }).done(function(){ // do something... }).done(function(){ // do something... });
deferred對象還有一個then方法,其實它是一個整合done和fail的方法,它接受一到兩個參數(shù),如果有兩個參數(shù),那么第一個就是done方法的回調(diào)函數(shù),第二個是fail方法的回調(diào)函數(shù)。如果只有一個參數(shù),那就是done方法的回調(diào)函數(shù)。
var success = function(){ alert('success'); }; var error = function(){ alert('error'); }; // 兩個參數(shù) $.ajax('test.json').then(success, error); // 一個參數(shù) $.ajax('test.json').then(success);
jQuery還提供了一個$.when(deferreds)的方法來執(zhí)行一個或多個延遲對象的回調(diào)函數(shù),當(dāng)它的參數(shù)是延遲對象時,它會在所有延遲對象代表的異步執(zhí)行完后再執(zhí)行相應(yīng)的回調(diào)函數(shù)
$.when($.ajax('test.json'), $.ajax('demo.json')) .done(function(){ alert('success'); }).fail(function(){ alert('error'); });
很好理解,只有當(dāng)所有異步都成功時,才會執(zhí)行done方法中的回調(diào),否則會執(zhí)行fail方法中的回調(diào),同樣好理解的是的done方法中回調(diào)函數(shù)的默認(rèn)參數(shù)數(shù)量則和when方法參數(shù)數(shù)量相同。
而如果when方法中傳入的只是普通對象,不是deferred對象時,會立即執(zhí)行done方法中的回調(diào),回調(diào)函數(shù)的默認(rèn)參數(shù)為傳入when方法的對象本身。
// 當(dāng)傳入when方法的參數(shù)只是普通對象時 $.when({test: 'test'}).done(function(resp){ console.log(resp.test); // 'test' }).fail(function(){ // 由于傳入的對象不是deferred對象,那么就不會調(diào)用fail中的回調(diào)了 })
當(dāng)你需要兩個甚至更多的異步結(jié)束后才調(diào)用回調(diào)函數(shù),同時這些異步ajax可能還需要修改傳輸方式type或者傳數(shù)據(jù)data時,代碼就顯得很亂,可讀性很差。
所以就可以對ajax進行再次封裝,提高代碼可讀性
var ajax = function(url, type, param){ return $.ajax({ url: url, type: type, data: param || {} }); }; ajax('test.json').done(function(resp){ alert('success'); }).fail(function(){ alert('error'); });
以上所述是小編給大家介紹的jQuery中的deferred對象的使用(一)的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- jQuery中deferred對象使用方法詳解
- jQuery通過deferred對象管理ajax異步
- jQuery的promise與deferred對象在異步回調(diào)中的作用
- jQuery.deferred對象使用詳解
- 以jQuery中$.Deferred對象為例講解promise對象是如何處理異步問題
- jQuery的deferred對象詳解
- jQuery之Deferred對象詳解
- jquery基礎(chǔ)教程之deferred對象使用方法
- 利用jQuery的deferred對象實現(xiàn)異步按順序加載JS文件
- jQuery的deferred對象使用詳解
- 在jQuery1.5中使用deferred對象 著放大鏡看Promise
- 在jQuery 1.5中使用deferred對象的代碼(翻譯)
- jQuery的deferred對象使用詳解
相關(guān)文章
JQuery入門——事件切換之hover()方法應(yīng)用介紹
謂切換事件,即有兩個以上的事件綁定于一個元素,在元素的行為動作間進行切換,有兩個方法用于事件的切換,一個方法是hover(),另一個是toggle(),感興趣的朋友不妨了解下,或許對你有所幫助2013-02-02jQery使網(wǎng)頁在顯示器上居中顯示適用于任何分辨率
這篇文章主要介紹了jQery使網(wǎng)頁在任何分辨率的顯示器上居中顯示的方法,需要的朋友可以參考下2014-06-06jquery修改網(wǎng)頁背景顏色通過css方法實現(xiàn)
在瀏覽一些網(wǎng)站,尤其是一些小說網(wǎng)站的時候,都會有修改頁面背景顏色的地方,這個是用jquery可以做到2014-06-06ASP.NET jQuery 實例16 通過控件CustomValidator驗證RadioButtonList
上一節(jié)已經(jīng)介紹過控件CustomValidator的使用方法,下面直接看代碼2012-02-02如何使用jquery easyui創(chuàng)建標(biāo)簽組件
這篇文章主要介紹了如何使用jquery easyui創(chuàng)建標(biāo)簽組件的相關(guān)資料,需要的朋友可以參考下2015-11-11基于jQuery實現(xiàn)鼠標(biāo)點擊導(dǎo)航菜單水波動畫效果附源碼下載
這篇文章主要介紹了基于jQuery實現(xiàn)鼠標(biāo)點擊導(dǎo)航菜單水波動畫效果附源碼下載,需要的朋友參考下2016-01-01