Ajax(Asynchronous Javascript + XML)技術(shù)的核心是XMLHttpRequest對(duì)象
,即: XHR
犹菇。雖然名字中包含XML袍睡,但它所指的僅僅是這種無須刷新頁面即可從服務(wù)器端獲取數(shù)據(jù)的技術(shù)篓叶,其通信與數(shù)據(jù)格式無關(guān)沪蓬,并不一定是XML數(shù)據(jù)彤钟。
XMLHttpRequest對(duì)象
IE7+、Firefox跷叉、Opera逸雹、Chrome 和 Safari 都支持原生的XHR對(duì)象。我們可以直接使用XMLHttpRequest
構(gòu)造函數(shù)來創(chuàng)建XHR對(duì)象云挟。
var xhr = new XMLHttpRequest();
雖然梆砸,IE7之前版本的瀏覽器中,創(chuàng)建xhr的方法與此有所不同园欣,但是帖世,前端技術(shù)發(fā)展到今天,已經(jīng)很少有業(yè)務(wù)需求是要支持IE7之前的版本了沸枯。因此日矫,這里我略過這一情況。
XHR的用法
使用 XHR對(duì)象的時(shí)候绑榴,要調(diào)用的第一個(gè)方法是open()
哪轿,它接受3個(gè)參數(shù):
- 要發(fā)送請(qǐng)求的類型,如: get/post
- 請(qǐng)求的url
- 是否異步發(fā)送請(qǐng)求翔怎,這個(gè)參數(shù)是一個(gè)布爾值
xhr.open('get', 'example.php', false)
注意:open()方法的調(diào)用并不會(huì)真正發(fā)送請(qǐng)求窃诉,僅僅是啟動(dòng)一個(gè)請(qǐng)求以備發(fā)送!
另外,只能向同一個(gè)域中使用相同端口和協(xié)議的URL發(fā)送請(qǐng)求赤套,否則飘痛,會(huì)出現(xiàn)錯(cuò)誤。
在執(zhí)行open()
方法之后于毙,必須再調(diào)用send()
方法敦冬,才會(huì)真正發(fā)起ajax請(qǐng)求。
xhr.open('get', 'example.txt', false);
xhr.send(null);
send()方法接收一個(gè)參數(shù)唯沮,即:要作為請(qǐng)求主體發(fā)送的數(shù)據(jù)脖旱。如果不需要發(fā)送數(shù)據(jù)堪遂,那么必須傳入null
,因?yàn)樵搮?shù)對(duì)于部分瀏覽器而言是必需的萌庆。
本例中的請(qǐng)求是同步的溶褪,Javascript代碼會(huì)等到服務(wù)器響應(yīng)之后再執(zhí)行。
收到響應(yīng)后践险,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充XHR對(duì)象的屬性猿妈,相關(guān)的屬性有:
- responseText: 作為響應(yīng)主體被返回的文本。
- responseXML: 如果響應(yīng)的內(nèi)容類型是"text/xml"或者"application/xml"巍虫,那么這個(gè)屬性中將保存著包含響應(yīng)數(shù)據(jù)的XML DOM文檔彭则。
- status: 響應(yīng)的HTTP狀態(tài)
- statusText: HTTP狀態(tài)的說明
無論內(nèi)容類型是什么,響應(yīng)主體的內(nèi)容都會(huì)保存到responseText
屬性中占遥,而對(duì)于非XML數(shù)據(jù)
而言俯抖,responseXML 屬性的值將會(huì)是null
。
收到響應(yīng)后瓦胎,一般來說芬萍,會(huì)先判斷 status 是否為200,這是此次請(qǐng)求成功的標(biāo)志搔啊。此時(shí)柬祠,responseText
屬性的內(nèi)容已經(jīng)就緒,而且在內(nèi)容類型正確的情況下负芋,responseXML
也能夠訪問了漫蛔。
另外,狀態(tài)碼status
如果是304示罗,那么表示請(qǐng)求的資源沒有被修改惩猫,可以直接使用瀏覽器中的緩存,當(dāng)然蚜点,這樣的響應(yīng)也是有效的。
if( (xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 ){
alert(xhr.responseText);
}
else{
alert('fail! status:' + xhr.status);
}
有的瀏覽器會(huì)錯(cuò)誤地報(bào)告 204 的狀態(tài)代碼拌阴。IE中 XHR 的ActiveX版本會(huì)將204設(shè)置為1223绍绘,而IE中原生的 XHR 則會(huì)將 204 規(guī)范化為 200。Opera會(huì)在取得204時(shí)報(bào)告 status的值為0迟赃。
原文鏈接:http://www.4455q.com/ajax-comet-javascript-chapter21-note1.html