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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。