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