版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、jQuery中deferred對象用法方法詳解_ 在jquery1.5之后的版本中,加入了一個deferred對象,也就是延遲對象,用來處理將來某一時間點(diǎn)發(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(func
2、tion() / fail 相當(dāng)于error回調(diào) alert(error); ); 還可以同時寫多個回調(diào),會根據(jù)挨次依次執(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方法,其實(shí)它是一個整合done和fail的方法,它接受一到兩個參數(shù),假如有兩個參數(shù),那么第一個就是done
3、方法的回調(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還供應(yīng)了一個$.when(deferreds)的方法來執(zhí)行一個或多個延遲對象的回調(diào)函數(shù),當(dāng)它的參數(shù)是延遲對象時,它會在全部延遲對象代表的異步執(zhí)行完后再執(zhí)
4、行相應(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ù)
5、只是一般對象時 $.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進(jìn)行再次封裝,提高代碼可讀性 var ajax = function(url, type, param) return $.ajax( url: url,
6、type: type, data: param | ); ; ajax(test.json).done(function(resp) alert(success); ).fail(function() alert(error); ); 接者學(xué)習(xí),漏了一個always()方法,參數(shù)也是回調(diào)函數(shù),與done和fail不同的是,無論任何狀況都執(zhí)行always方法中的回調(diào)。 deferred對象不光可以用在jquery的ajax方法中,他供應(yīng)了一系列的接口,使它的通用型大大提高。 比如有這樣一個耗時比較久的方法 function a() function b() alert(start); setTi
7、meout(b, 3000); 假如要在這個方法之后執(zhí)行某個回調(diào),就不能用$.when()了,由于當(dāng)$.when()的參數(shù)不為deferred對象是會挺直調(diào)用done或者always中的回調(diào)函數(shù)。 這個時候就要用法deferred對象的其他方法了,還是上面的方法,做一些改寫 function a() var def = $.Deferred(); / 創(chuàng)建deferred對象 function b() alert(start); def.resolve(); / 轉(zhuǎn)變deferred對象的狀態(tài) setTimeout(b, 3000); return def; $.when(a().done(f
8、unction() alert(Its callback); ); 分析一下: 1). $.Deferred()方法會創(chuàng)建一個deferred對象 2). def.resolve()會轉(zhuǎn)變deferred對象的狀態(tài),deferred對象有三種狀態(tài),未完成,勝利,失敗。 它有resolve()和reject()兩個方法,resolve方法可以把對象狀態(tài)改為勝利,reject方法可以把狀態(tài)改為失敗。 又有以上的寫法會消失問題,返回的deferred對象可以被外部轉(zhuǎn)變狀態(tài),所以還供應(yīng)了一個promise()方法,這個方法會在deferred對象的基礎(chǔ)上返回一個新的deferred對象,不同的是,返回的對象只存在可被觀看到狀態(tài),而不具備可轉(zhuǎn)變其狀態(tài)的方法,類似返回了一個只讀的deferred對象。 所以同樣的例子可以改寫成這樣 function a() var def = $.Deferred(); / 創(chuàng)建deferred對象 function b() alert(start); def.resolve(); / 轉(zhuǎn)變deferred對象的狀態(tài) setTimeo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州澍青醫(yī)學(xué)高等??茖W(xué)?!稄V告策劃與創(chuàng)意》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)2025-2026學(xué)年度第一學(xué)期教學(xué)工作計劃
- 長春汽車工業(yè)高等??茖W(xué)?!毒频旯芾硇畔⑾到y(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 食品生產(chǎn)過程中交叉污染預(yù)防措施
- 保險入職培訓(xùn)模板
- 專業(yè)基礎(chǔ)知識(給排水)-2020年注冊公用設(shè)備工程師(給水排水)《專業(yè)基礎(chǔ)知識》真題
- 代表愛情的花語
- 統(tǒng)編版五年級語文上冊寒假作業(yè)(九)(有答案)
- 人教版四年級數(shù)學(xué)下冊第一次月考綜合卷(含答案)
- 二零二五年特種設(shè)備特種買賣合同3篇
- 下套管危害識別和風(fēng)險評估
- 翼狀胬肉病人的護(hù)理
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動化系統(tǒng)用戶操作及問題處理培訓(xùn)
- 家庭教養(yǎng)方式問卷(含評分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級語文下冊《蜘蛛開店》
- 鍋爐升降平臺管理
評論
0/150
提交評論