Ajax是無需刷新頁面就能夠從服務(wù)器取得數(shù)據(jù)的一種方法扇雕。
1盏触、XMLHttpRequest對(duì)象
各瀏覽器(包括ie7+)都支持原生的XHR對(duì)象,在這些瀏覽器中創(chuàng)建XHR對(duì)象可以:
var xhr=new XMLHttpRequest();
ps:個(gè)人覺得現(xiàn)在寫一個(gè)跨瀏覽器兼容的函數(shù)方法沒必要,兼容做到ie7+就夠了
2红氯、XHR的用法
①open( )方法
接受三個(gè)參數(shù):第一個(gè)參數(shù)是要發(fā)送的請(qǐng)求的類型(“get”幽污、“post”等)嚷辅;第二個(gè)參數(shù)是請(qǐng)求的URL(文件);第三個(gè)參數(shù)表示是否(true/false)異步發(fā)送請(qǐng)求的布爾值距误。
var xhr=new XMLHttpRequest();
xhr.open("get","example.txt",false);
②send( )方法
要發(fā)送特定的請(qǐng)求簸搞,必須像下面這樣調(diào)用send( )方法
var xhr=new XMLHttpRequest();
xhr.open("get","example.txt",false);
xhr.send(null);
????調(diào)用send以后,請(qǐng)求就會(huì)被分派到服務(wù)器准潭,且由于這次請(qǐng)求是同步的(false)趁俊,所以js代碼會(huì)等到服務(wù)器響應(yīng)之后再繼續(xù)執(zhí)行。
????在收到響應(yīng)以后刑然,響應(yīng)的數(shù)據(jù)就會(huì)自動(dòng)填入到XHR對(duì)象的幾個(gè)屬性中去寺擂。
③XHR對(duì)象的屬性
- responseText:作為響應(yīng)主體返回的文本。
- responseXML:如果響應(yīng)類型是“text/xml”或“application/xml”,這個(gè)屬性將包含這響應(yīng)數(shù)據(jù)的XML DOM文檔。
- status:響應(yīng)的http狀態(tài)沽讹。
- statusText:http狀態(tài)說明
var xhr=new XMLHttpRequest();
xhr.open("get","./example.txt",false);
xhr.send(null);
if(xhr.status>=200 && xhr.status<300 || xhr.status==304){
alert(xhr.responseText);
}else{
alert("Request was unsuccessful:"+xhr.status);
}
ps:chrome瀏覽器不支持本地的異步請(qǐng)求般卑,所以本地測試請(qǐng)換其他瀏覽器
- readyState:表示請(qǐng)求/響應(yīng)過程的當(dāng)前活動(dòng)階段。這個(gè)屬性可取的值如下:
0:未初始化爽雄。尚未調(diào)用open方法蝠检。
1:啟動(dòng)。已經(jīng)調(diào)用open方法挚瘟,但尚未調(diào)用send方法叹谁。
2:發(fā)送。已經(jīng)調(diào)用send方法乘盖,但尚未接受到響應(yīng)焰檩。
3:接受。已經(jīng)接受到部分響應(yīng)數(shù)據(jù)订框。
4:完成析苫。已經(jīng)接受到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了穿扳。
只要readyState屬性的值由一個(gè)值變成另一個(gè)值衩侥,都會(huì)觸發(fā)一次readystatechange事件;可以利用這個(gè)事件來檢測每次狀態(tài)變化后readyState的值
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
if(xhr.readyState == 4){
if(xhr.status>=200 && xhr.status<300 || xhr.status==304){
alert(xhr.responseText);
}else{
alert("Request was unsuccessful:"+xhr.status);
}
}
};
xhr.open("get","example.txt",true);
xhr.send(null);