您好,登錄后才能下訂單哦!
readyState和status屬性是什么以及AJAX怎樣接收服務器返回的數據,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在講解如何接收服務器數據之前,先來看一下 XMLHttpRequest 對象的 readyState 和 status 屬性。下面億速云小編來講解下readyState 和 status 屬性是什么?AJAX怎樣接收服務器返回的數據?
readyState 和 status 屬性是什么
readyState 屬性保存有 XMLHttpRequest 對象的交互狀態,從 0 到 4 變化:
0 :未初始化(還沒有調用send()方法);
1:載入(已調用send()方法,正在發送請求);
2:載入完成(send()方法執行完成,已經接收到全部響應數據);
3:交互(正在解析響應數據);
4:完成(響應數據解析完成,可以在客戶端調用了)。
status 屬性保存有 XMLHttpRequest 對象與后臺交互時服務器返回的一個狀態碼。例如:
200:OK,請求發送成功;
404:未找到頁面。
查看完整的 status 狀態碼:Ajax status 狀態對照表
注意:readyState 和 status 的含義不同,readyState 是XMLHttpRequest 對象的交互狀態,共有 5 個狀態,與服務器無關;status 是服務器返回的一個狀態碼,表示服務器的響應結果,例如,200 表示服務器響應成功,404 表示請求的文件在服務器上不存在。
AJAX 請求成功,xmlhttp.readyState=4,xmlhttp.statue=200,代碼:
if (xmlhttp.readyState==4 && xmlhttp.status==200){
// AJAX 請求成功,處理響應數據
}
事件句柄 onreadystatechange
onreadystatechange 是一個事件句柄,存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。
當發送一個 AJAX 請求后,客戶端無法確定請求何時完成,所以需要用事件機制來捕獲請求的狀態,即 readyState 的值,onreadyStateChange 實現了這一功能。
如下代碼所示:
xmlhttp.onreadystatechange=function(){
// 每次改變 readyState,都會調用該方法
if (xmlhttp.readyState==4 && xmlhttp.status==200){
// AJAX 請求成功,處理響應數據
}
}
AJAX怎樣接收服務器返回的數據
接收來自服務器的響應數據,請使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性。
屬性 描述
responseText 將響應數據作為字符串解析。
responseXML 將響應數據作為 XML 解析。
例如,將服務器返回的數據更新到 id="demo" 的節點:
?
1
document.getElementById("demo").innerHTML=xmlhttp.responseText ;
注意:服務器返回的數據一般作為字符串來解析,很少作為 XML 來解析,這里不再講述 responseXML 。
到此,我們終于可以實現一個完整的 AJAX 請求了。
下面的代碼展示了如何獲取客戶端 IP 地址:
script type="text/javascript">
var xmlhttp;
// 創建 XMLHttpRequest 對象
try{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}catch(e){
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){ // 響應成功
document.getElementById("demo").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/demo/javascript/ajax/ajaxDemo.php?action=getIP",true);
xmlhttp.send();
/script>
注意:onreadystatechange 需要在請求發送之前設定,編寫代碼時,要寫在 open() 和 send() 之前。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。