要學(xué)習(xí)Ajax,主要處理的對(duì)象是XMLHttpRequest刮萌。
- 首先是創(chuàng)建XMLHttpRequest對(duì)象
var xmlhttp;
function create() {
if (window.ActiveXObject) { //IE瀏覽器
xmlhttp= new ActiveXObject ("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) { //非IE瀏覽器
xmlhttp= new XMLHeepRequest;
}
}
看該瀏覽器是否支持ActiveX控件
- 發(fā)送請(qǐng)求函數(shù)
function send (url) {
create(); //創(chuàng)建XMLHttpRequest對(duì)象
xmlhttp.open("get",url,true); //初始化用來發(fā)送請(qǐng)求的http方法(通常為get和post)
xmlhttp.onreadystatechange = process ; //重要驮配!見下文
xmlhttp. send(null);
} - 處理返回信息的函數(shù)
function process () {
if(xmlhttp.readyState == 4) { //判斷xmlhttp對(duì)象狀態(tài)
if(xmlhttp.status == 200 ) {//信息成功返回
var res= xmlhttp.responseText;
window.alert(res);
} else {
window.alert("請(qǐng)求頁面異常")
}
}
}
現(xiàn)在開始分析每一部分函數(shù)
===
readystate的值 (以下的對(duì)象都是指XMLHttpRequestduix )
當(dāng)該對(duì)象最初被建立時(shí),還未進(jìn)行open初始化着茸,該值為0壮锻,描述一種為初始化的狀態(tài)。
當(dāng)open初始化后涮阔,該值為1猜绣,描述一種“發(fā)送“狀態(tài)(但是還沒發(fā)送),只是對(duì)象已經(jīng)準(zhǔn)備把一個(gè)請(qǐng)求發(fā)送到服務(wù)器敬特。
當(dāng)已經(jīng)通過send()方法把請(qǐng)求發(fā)送到服務(wù)器端掰邢,但還未收到一個(gè)響應(yīng),該值為2伟阔,描述一種”已發(fā)送“的狀態(tài)辣之。
當(dāng)已經(jīng)接受HTTP響應(yīng)頭部信息,但是消息體部分還沒有完全接收皱炉,該值為3怀估,描述一種”正在接收“的狀態(tài)
當(dāng)響應(yīng)被完全接收,該值為4合搅,描述一種”已加載“的狀態(tài)
在發(fā)送請(qǐng)求的函數(shù)中多搀,有這么一條
xmlhttp.onreadystatechange = process ;
onreadystatechange是XMLHttpRequest的一個(gè)對(duì)象屬性,是readyState狀態(tài)改變的事件觸發(fā)器历筝。意思就是每一次readyState狀態(tài)值的改變都會(huì)調(diào)用該函數(shù)酗昼,所以通常把事件的處理函數(shù)賦予onreadystatechange,當(dāng)執(zhí)行open()后梳猪,readyState值變?yōu)?麻削,但是并不滿足已接受的狀態(tài)(readyState值為4),所以此時(shí)并不執(zhí)行處理返回的數(shù)據(jù)春弥。
當(dāng)將請(qǐng)求通過send()發(fā)送并且接收到響應(yīng)后呛哟,此時(shí)readyState值為4了。注意匿沛!不是該值為4才執(zhí)行返回信息函數(shù)扫责,而是每一次改變都執(zhí)行,只是為4的時(shí)候滿足條件逃呼,響應(yīng)已經(jīng)返回
status 是該對(duì)象的一個(gè)屬性鳖孤,表示服務(wù)器的HTTP狀態(tài)碼(200對(duì)應(yīng)OK者娱,404對(duì)應(yīng)Not Found)
只有當(dāng)以上倆個(gè)條件都滿足了才執(zhí)行處理返回信息的函數(shù)。
把原理了解清楚后苏揣,接下來就可以對(duì)返回信息進(jìn)行處理啦~