ajax工作原理是
相當(dāng)于在用戶和服務(wù)器之間加了—個中間層(AJAX引擎),使用戶操作與服務(wù)器響應(yīng)異步化啸驯。
對于用戶請求ajax引擎會做一些數(shù)據(jù)驗證和數(shù)據(jù)處理劣摇,不是所有請求都提交給服務(wù)器,當(dāng)需要從服務(wù)器讀取新數(shù)據(jù)時由Ajax引擎代為向服務(wù)器提交請求锐秦。AJAX最大優(yōu)點就是不刷新整個頁面的前提下與服務(wù)器通信維護數(shù)據(jù)。
過程的話
第一步:創(chuàng)建一個ajax引擎對象,ie6的是new ActiveXObject其他瀏覽器是new一個xmlHttpRequest對象
第二步調(diào)用open方法啟動一個請求以備發(fā)送囱挑,open方法傳入三個參數(shù) 請求類型,請求url和一個布爾值
第三步調(diào)用send方法發(fā)送
第四部處理回調(diào)函數(shù)onreadystatechange沼溜,當(dāng)readState = 4 響應(yīng)數(shù)據(jù)完成時 并且2status=200請求成功的時候處理響應(yīng)數(shù)據(jù)
注意:回調(diào)函數(shù)要寫在open()和send()之前
Jsonp原理
動態(tài)創(chuàng)建一個script標(biāo)簽平挑,利用script標(biāo)簽src屬性訪問沒有限制,實現(xiàn)跨域。
web客戶端通過與調(diào)用腳本一樣的方式來調(diào)用跨域服務(wù)器上動態(tài)生成的js格式文件(后綴.json)通熄,服務(wù)器之所以要動態(tài)生成json文件目的把客戶端需要的數(shù)據(jù)裝入進去唆涝。
允許用戶傳遞一個callback參數(shù)給服務(wù)端,然后服務(wù)端返回數(shù)據(jù)時會將這個callback參數(shù)作為函數(shù)名來包裹住json數(shù)據(jù) 這樣客戶端就可以隨意定制自己的函數(shù)來自動處理返回數(shù)據(jù)
Ajax和jsonp的區(qū)別
1.ajax和jsonp的調(diào)用方式很像唇辨,目的一樣廊酣,都是請求url,然后把服務(wù)器返回的數(shù)據(jù)進行處理赏枚,因此jquery和ext等框架都把jsonp作為ajax的一種形式進行了封裝亡驰;
2.實質(zhì)不同
ajax的核心是通過xmlHttpRequest獲取非本頁內(nèi)容
jsonp的核心是動態(tài)添加script標(biāo)簽調(diào)用服務(wù)器提供的js腳本(后綴.json)
3.區(qū)別聯(lián)系
不在于是否跨域
ajax通過服務(wù)端代理一樣跨域
jsonp也不并不排斥同域的數(shù)據(jù)的獲取
4.jsonp是一種方式或者說非強制性的協(xié)議
ajax也不一定非要用json格式來傳遞數(shù)據(jù)
5.jsonp只支持get請求,ajax支持get和post請求