成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 詳解jQuery中的deferred對象的使用(一)
全站頭部文字 我要出現在這里
詳解jQuery中的deferred對象的使用(一) 598 2024-03-02   

deferred對象是jQuery對Promises接口的實現。它是非同步操作的通用接口,可以被看作是一個等待完成的任務,開發者通過一些通過的接口對其進行設置。事實上,它扮演代理人(proxy)的角色,將那些非同步操作包裝成具有某些統一特性的對象,典型例子就是Ajax操作、網頁動畫、web worker等等。

jQuery的所有Ajax操作函數,默認返回的就是一個deferred對象。

在jquery1.5之后的版本中,加入了一個deferred對象,也就是延遲對象,用來處理未來某一時間點發生的回調函數。同時,還改寫了ajax方法,現在的ajax方法返回的是一個deferred對象。

那就來看看deferred對象的用法。

1.ajax的鏈式回調

// ajax方法返回的是一個deferred對象,可以直接使用鏈式寫法
$.ajax('test.json').done(function(resp){
// done 相當于success回調,其中默認的參數為success回調的參數
alert('success');
}).fail(function(){
// fail 相當于error回調
alert('error');
}); 

還可以同時寫多個回調,會按照順序依次執行

$.ajax('test.json').done(function(resp){
// done 相當于success回調,其中默認的參數為success回調的參數
alert('success');
}).done(function(){
// do something...
}).done(function(){
// do something...
}); 

deferred對象還有一個then方法,其實它是一個整合done和fail的方法,它接受一到兩個參數,如果有兩個參數,那么第一個就是done方法的回調函數,第二個是fail方法的回調函數。如果只有一個參數,那就是done方法的回調函數。

var success = function(){
alert('success'); 
};
var error = function(){
alert('error');
};
// 兩個參數
$.ajax('test.json').then(success, error);
// 一個參數
$.ajax('test.json').then(success); 

jQuery還提供了一個$.when(deferreds)的方法來執行一個或多個延遲對象的回調函數,當它的參數是延遲對象時,它會在所有延遲對象代表的異步執行完后再執行相應的回調函數

$.when($.ajax('test.json'), $.ajax('demo.json')) .done(function(){
alert('success'); 
}).fail(function(){
alert('error');
}); 

很好理解,只有當所有異步都成功時,才會執行done方法中的回調,否則會執行fail方法中的回調,同樣好理解的是的done方法中回調函數的默認參數數量則和when方法參數數量相同。

而如果when方法中傳入的只是普通對象,不是deferred對象時,會立即執行done方法中的回調,回調函數的默認參數為傳入when方法的對象本身。

// 當傳入when方法的參數只是普通對象時
$.when({test: 'test'}).done(function(resp){
console.log(resp.test); // 'test' 
}).fail(function(){
// 由于傳入的對象不是deferred對象,那么就不會調用fail中的回調了 
}) 

當你需要兩個甚至更多的異步結束后才調用回調函數,同時這些異步ajax可能還需要修改傳輸方式type或者傳數據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對象的使用(一)的相關知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對綠夏網網站的支持!



主站蜘蛛池模板: 变态的视频| 日本大片网址| 38在线电影| 蔡雅同| 啪啪电影网| 金三角电影| 飞扬的青春 电视剧| 日韩免费观看视频| 企鹅头像| 乔治娅·格洛梅| 不要好舒服| 贝蒂的启蒙| 高地1—36集电视剧免费观看剧情| 绿野仙踪电影| 时事新闻摘抄| 美国派7| 谭耀文演的电影| 斯科特阿金斯主演所有电影| 恋人电影| 头文字d里演员表| 老板5| 郭馨钰| 赖小子| 281封信电视剧演员表| 活动评价| 儿媳妇电视剧在线观看| 免费观看片| 血色残阳剧情简介| 抗日电影大突围完整版| douyin| 重庆新闻频道| 美女主播性感热舞| 谜证在线观看免费完整版| 上海东方卫视节目表| 家书1000字| 10种齿痕图解| 女老师 电影| 陈澎| 罗东| 天地争霸美猴王在线观看| 张俪性感|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103