Ajax 的底層實(shí)現(xiàn)都是瀏覽器提供的,所以任何基于 api 上面的框架或者庫(kù),都只是說(shuō)對(duì)于功能的靈活與兼容維護(hù)性做出最優(yōu)的擴(kuò)展。
Ajax 請(qǐng)求的流程:
1、通過(guò) new XMLHttpRequest 或其它的形式(指IE)生成 ajax 的對(duì)象 xhr。 2、通過(guò) xhr.open(type, url, async, username, password) 的形式建立一個(gè)連接。 3、通過(guò) etRequestHeader 設(shè)定 xhr 的請(qǐng)求頭部(request header)。 4、通過(guò) send(data) 請(qǐng)求服務(wù)器端的數(shù)據(jù)。 5、執(zhí)行在 xhr 上注冊(cè)的 onreadystatechange 回調(diào)處理返回?cái)?shù)據(jù)。
這幾步之中,我們開(kāi)發(fā)者可能會(huì)遇到的問(wèn)題
1、跨域 2、json的格式 3、dataType 4、AJAX亂碼問(wèn)題 5、頁(yè)面緩存 6、狀態(tài)的跟蹤 7、不同平臺(tái)兼容
jQuery 主要就是解決上面這問(wèn)題,之后就在這個(gè)基礎(chǔ)之上進(jìn)行擴(kuò)展,jQuery2.0.3 版的 Ajax 部分源碼大概有 1200 多行,主要針對(duì) ajax 的操作進(jìn)行了一些擴(kuò)展,使之更加靈活,jQuery 在 1.5 中對(duì) Ajax 模塊的重寫(xiě),增加了幾個(gè)新的概念,Ajax 模塊提供了三個(gè)新的方法用于管理、擴(kuò)展 Ajax 請(qǐng)求,分別是:
前置過(guò)濾器 jQuery. ajaxPrefilter 請(qǐng)求分發(fā)器 jQuery. ajaxTransport 類(lèi)型轉(zhuǎn)換器 ajaxConvert
除此之后還重寫(xiě)了整個(gè)異步隊(duì)列處理,加入了 deferred,可以將任務(wù)完成的處理方式與任務(wù)本身解耦合,使用 deferreds 對(duì)象,多個(gè)回調(diào)函數(shù)可以被綁定在任務(wù)完成時(shí)執(zhí)行,甚至可以在任務(wù)完成后綁定這些回調(diào)函數(shù)。這些任務(wù)可以是異步的,也可以是同步的。
比如之前提到的:
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)