實(shí)現(xiàn)步驟(只需四步):
第一步,獲取XMLHttpRequest對(duì)象,直接new一個(gè)XMLHttpRequest對(duì)象,var xmlHttp = new XMLHttpRequest()(適用于IE7+、firefox、Chrome、Safari和Opera),如果還有其他版本的瀏覽器,則會(huì)創(chuàng)建各自對(duì)應(yīng)的對(duì)象。
第二步,打開與服務(wù)器的連接
xmlHttp.open(method,url,async);
method:請(qǐng)求方式,可以是GET或POST
url:所要訪問(wèn)的服務(wù)器中資源的路徑如servlet/AServlet
async:是否為異步傳輸,true表示為異步傳輸,一般都是true
第三步,發(fā)送請(qǐng)求?
xmlHttp-.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//設(shè)置請(qǐng)求頭,通知服務(wù)器發(fā)送的數(shù)據(jù)是請(qǐng)求參數(shù)
new XMLHttpRequest().send("xxxxx");//注意,如果不給參數(shù),可能會(huì)造成部分瀏覽器無(wú)法發(fā)送請(qǐng)求
參數(shù):如果是GET請(qǐng)求,可以是null,因?yàn)镚ET提交參數(shù)會(huì)拼接在url后面
如果是POST請(qǐng)求,傳入的就是請(qǐng)求參數(shù)
第四步,注冊(cè)監(jiān)聽
在XMLHttpRequest對(duì)象的一個(gè)事件上注冊(cè)監(jiān)聽器:
onreadystatechange
一共有五個(gè)狀態(tài):(xmlHttp.readyState)
0狀態(tài):表示剛創(chuàng)建XMLHttpRequest對(duì)象,還未調(diào)用open()方法
1狀態(tài):表示剛調(diào)用open()方法,但是還沒(méi)有調(diào)用send()方法發(fā)送請(qǐng)求
2狀態(tài):調(diào)用完了send()方法了,請(qǐng)求已經(jīng)開始
3狀態(tài):服務(wù)器已經(jīng)開始響應(yīng),但是不代表響應(yīng)結(jié)束
?? ??? ??? ??? ?4狀態(tài): 服務(wù)器響應(yīng)結(jié)束!(通常我們只關(guān)心這個(gè)狀態(tài))
//獲取xmlHttp對(duì)象的狀態(tài):
var state = xmlHttp.readyState;//可能得到0,1,2,3,4?
//獲取服務(wù)器響應(yīng)的狀態(tài)碼
var status = xmlHttp.status;
//獲取服務(wù)器響應(yīng)的內(nèi)容
var data = xmlHttp.responseText;//得到服務(wù)器響應(yīng)的文本格式的數(shù)據(jù)?
//相當(dāng)于每次狀態(tài)改變時(shí),都會(huì)調(diào)用這個(gè)function
xmlHttp.onreadystatechange = function(){
? ? //當(dāng)服務(wù)器已經(jīng)處理完請(qǐng)求之后
? ? if(xmlHttp.readyState == 4){
? ? ? ? //status是應(yīng)答狀態(tài)碼,200說(shuō)明服務(wù)器響應(yīng)完成,而且狀態(tài)OK
? ? ? ? if(xmlHttp.status == 200){
? ? ? ? ? ? //獲取響應(yīng)數(shù)據(jù)并執(zhí)行局部刷新的邏輯
? ? ? ? ? ? var result = xmlHttp.responseText;
? ? ? ? ? ? result = xmlHttp.responseXML;
? ? ? ? }
? ? }
}