1.ajax 請求步驟
(1)創(chuàng)建`XMLHttpRequest`對象,也就是創(chuàng)建一個異步調(diào)用對象.
var xhr= new XMLHttpRequest();
在IE瀏覽器中創(chuàng)建XMLHttpRequest對象的方式如下所示:
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
(2)創(chuàng)建一個新的`HTTP`請求,并指定該`HTTP`請求的方法、`URL`及驗證信息.
get請求
var param = 'username' + uname + '&password' ;
encodeURI()用來對中文參數(shù)進行編碼,防止亂碼
xhr.open('get','./01check.php?'+encodeURI(param),true);
參數(shù)1、請求方式(get獲取數(shù)據(jù),post提交數(shù)據(jù))
參數(shù)2、請求地址(如果是get請求那么請求參數(shù)必須在url中傳遞)
參數(shù)3、同步或者異步標(biāo)志位,默認(rèn)是true表示異步,false表示同步
xhr.send(null);//get請求這里需要添加null參數(shù)
post請求
var param = 'password' ;
xhr.open('post','./01check.php',true); //post請求,參數(shù)通過send傳遞,不需要通過encodeURI轉(zhuǎn)碼
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded);//post 要請求頭
xhr.send(param); //post請求參數(shù)在這里傳遞,并且不需要轉(zhuǎn)碼
(3)設(shè)置響應(yīng)`HTTP`請求狀態(tài)變化的函數(shù).
xhr.onreadystatechange = function(){ //該函數(shù)調(diào)用的條件就是readyState狀態(tài)從2-4
if(xhr.readyState == 4){ //表示服務(wù)器返回的數(shù)據(jù)已經(jīng)可以使用了,但是這個數(shù)據(jù)不一定是正確的
if(xhr.status == 200){//表示服務(wù)器返回的數(shù)據(jù)是正常的,不是200表示數(shù)據(jù)是錯誤的
var data = xhr.responseText;
JSON.parse(data ); //可以將json字符串轉(zhuǎn)換成json對象
JSON.stringify(data ); //可以將json對象轉(zhuǎn)換成json對符串
var info = document.getElementById('info');
if(data == '1'){
info.innerHTML = '登錄成功';
}else if(data == '2'){
info.innerHTML = '用戶名或者密碼錯誤';
}
}
}
}
(4)發(fā)送`HTTP`請求.
(5)獲取異步調(diào)用返回的數(shù)據(jù).
(6)使用JavaScript和DOM實現(xiàn)局部刷新.
2.什么是readyState
readyState是XMLHttpRequest對象的一個屬性,用來標(biāo)識當(dāng)前XMLHttpRequest對象處于什么狀態(tài)。
readyState總共有5個狀態(tài)值,分別為0~4,每個值代表了不同的含義
0:初始化,XMLHttpRequest對象還沒有完成初始化
1:載入,XMLHttpRequest對象開始發(fā)送請求
2:載入完成,XMLHttpRequest對象的請求發(fā)送完成
3:解析,XMLHttpRequest對象開始讀取服務(wù)器的響應(yīng)
4:完成,XMLHttpRequest對象讀取服務(wù)器響應(yīng)結(jié)束
3.什么是status
status是XMLHttpRequest對象的一個屬性,表示響應(yīng)的HTTP狀態(tài)碼
在HTTP1.1協(xié)議下,HTTP狀態(tài)碼總共可分為5大類
1xx:信息響應(yīng)類,表示接收到請求并且繼續(xù)處理
2xx:處理成功響應(yīng)類,表示動作被成功接收、理解和接受
3xx:重定向響應(yīng)類,為了完成指定的動作,必須接受進一步處理
4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執(zhí)行
5xx:服務(wù)端錯誤,服務(wù)器不能正確執(zhí)行一個正確的請求
2.post 和 get的區(qū)別,什么時候用post,什么時候用get
get 存儲內(nèi)容小,不能超過2kb ;文件上傳只能用post
get 不安全,顯示在地址欄 ;post比較安全
get 效率高,因為post請求需要加密和解密的過程,get不需要
在做數(shù)據(jù)查詢時,建議用get方式;而在做數(shù)據(jù)添加,修改或刪除時,建議用post方式;
3、 Ajax的最大的特點是什么。
Ajax可以實現(xiàn)異步通信效果,實現(xiàn)頁面局部刷新,帶來更好的用戶體驗;按需獲取數(shù)據(jù),節(jié)約帶寬資源;
4、頁面編碼和被請求的資源編碼如果不一致如何處理?
對于ajax請求傳遞的參數(shù),如果是get請求方式,參數(shù)如果傳遞中文,在有些瀏覽器會亂碼,不同的瀏覽
器對參數(shù)編碼的處理方式不同,所以對于get請求的參數(shù)需要使用 encodeURI函數(shù)對參數(shù)進
行編碼處理,后臺開發(fā)語言都有相應(yīng)的解碼api。對于post請求不需要進行編碼