<!--PHP編程實(shí)戰(zhàn)-->
<!--JSON & Ajax -->
<!--15-3-->
<!--在JavaScript中創(chuàng)建XMLHttpRequest對(duì)象-->
<script type="text/javascript">
var xhr=new XMLHttpRequest();
</script>
- 請(qǐng)求方法: {"GET", "POST", "HEAD", "PUT", "DELETE", "OPTIONS"}之一
- URL: 請(qǐng)求的URL. 可以是PHP JavaScript HTML i純文本或者其他的文件類型
- 異步的(可選): 默認(rèn)為true,表示非阻塞調(diào)用.
- 用戶名(可選): 請(qǐng)求的服務(wù)器需要驗(yàn)證身份時(shí)候的用戶名.
- 密碼(可選): 請(qǐng)求的服務(wù)器需要驗(yàn)證身份時(shí)候的密碼.
同步調(diào)用
沒有監(jiān)聽,JavaScript代碼會(huì)等到服務(wù)器響應(yīng)之后再繼續(xù)執(zhí)行袍患。在收聽到響應(yīng)后历葛,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充XHR對(duì)象的屬性缝龄,相關(guān)的屬性簡介如下:
- responseText:作為響應(yīng)主題被返回的文本。
- reponseXML:如果響應(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)的說明宪肖。
應(yīng)該像下面這樣檢查同步請(qǐng)求的狀態(tài)碼
xhr.open("get", "example.txt", false);
xhr.send(null);
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.statusText);
} else {
alert("Request was unsuccessful: " + xhr.status);
}
通過檢測(cè)status來解決下一步的操作疯搅,不要依賴statusText濒生,因?yàn)楹笳咴诳鐬g覽器使用時(shí)不太可靠。
異步調(diào)用 onreadystatechange回調(diào)函數(shù)監(jiān)聽
檢測(cè)XHR對(duì)象的readyState屬性
- 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)可以在客戶端使用了屠缭。
必須在調(diào)用open()之前指定onreadystatechange事件處理程序才能確惫抗模跨瀏覽器兼容性。這里采用跨瀏覽器安全的DOM0級(jí)方法
var xhr = createXHR();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.statusText);
} else {
alert("Request was unsuccessful: " + xhr.status);
}
}
};
xhr.open("get", "example.txt", true);
xhr.send(null);