欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解jQuery中的deferred對(duì)象的使用(一)

 更新時(shí)間:2016年05月27日 09:14:57   作者:天上云好白  
deferred對(duì)象是jQuery對(duì)Promises接口的實(shí)現(xiàn)。接下來通過本文給大家詳解介紹jQuery中的deferred對(duì)象的使用(一),需要的朋友一起學(xué)習(xí)吧

 deferred對(duì)象是jQuery對(duì)Promises接口的實(shí)現(xiàn)。它是非同步操作的通用接口,可以被看作是一個(gè)等待完成的任務(wù),開發(fā)者通過一些通過的接口對(duì)其進(jìn)行設(shè)置。事實(shí)上,它扮演代理人(proxy)的角色,將那些非同步操作包裝成具有某些統(tǒng)一特性的對(duì)象,典型例子就是Ajax操作、網(wǎng)頁動(dòng)畫、web worker等等。

jQuery的所有Ajax操作函數(shù),默認(rèn)返回的就是一個(gè)deferred對(duì)象。

在jquery1.5之后的版本中,加入了一個(gè)deferred對(duì)象,也就是延遲對(duì)象,用來處理未來某一時(shí)間點(diǎn)發(fā)生的回調(diào)函數(shù)。同時(shí),還改寫了ajax方法,現(xiàn)在的ajax方法返回的是一個(gè)deferred對(duì)象。

那就來看看deferred對(duì)象的用法。

1.ajax的鏈?zhǔn)交卣{(diào)

// ajax方法返回的是一個(gè)deferred對(duì)象,可以直接使用鏈?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');
}); 

還可以同時(shí)寫多個(gè)回調(diào),會(huì)按照順序依次執(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對(duì)象還有一個(gè)then方法,其實(shí)它是一個(gè)整合done和fail的方法,它接受一到兩個(gè)參數(shù),如果有兩個(gè)參數(shù),那么第一個(gè)就是done方法的回調(diào)函數(shù),第二個(gè)是fail方法的回調(diào)函數(shù)。如果只有一個(gè)參數(shù),那就是done方法的回調(diào)函數(shù)。

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

jQuery還提供了一個(gè)$.when(deferreds)的方法來執(zhí)行一個(gè)或多個(gè)延遲對(duì)象的回調(diào)函數(shù),當(dāng)它的參數(shù)是延遲對(duì)象時(shí),它會(huì)在所有延遲對(duì)象代表的異步執(zhí)行完后再執(zhí)行相應(yīng)的回調(diào)函數(shù)

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

很好理解,只有當(dāng)所有異步都成功時(shí),才會(huì)執(zhí)行done方法中的回調(diào),否則會(huì)執(zhí)行fail方法中的回調(diào),同樣好理解的是的done方法中回調(diào)函數(shù)的默認(rèn)參數(shù)數(shù)量則和when方法參數(shù)數(shù)量相同。

而如果when方法中傳入的只是普通對(duì)象,不是deferred對(duì)象時(shí),會(huì)立即執(zhí)行done方法中的回調(diào),回調(diào)函數(shù)的默認(rèn)參數(shù)為傳入when方法的對(duì)象本身。

// 當(dāng)傳入when方法的參數(shù)只是普通對(duì)象時(shí)
$.when({test: 'test'}).done(function(resp){
console.log(resp.test); // 'test' 
}).fail(function(){
// 由于傳入的對(duì)象不是deferred對(duì)象,那么就不會(huì)調(diào)用fail中的回調(diào)了 
}) 

當(dāng)你需要兩個(gè)甚至更多的異步結(jié)束后才調(diào)用回調(diào)函數(shù),同時(shí)這些異步ajax可能還需要修改傳輸方式type或者傳數(shù)據(jù)data時(shí),代碼就顯得很亂,可讀性很差。

所以就可以對(duì)ajax進(jìn)行再次封裝,提高代碼可讀性

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對(duì)象的使用(一)的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論