7.11随笔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.11随笔相关的知识,希望对你有一定的参考价值。
readystate取值 描述
0 描述一种"未初始化"状态;此时,已经创建一个xmlhttprequest对象,但是还没有初始化。
1 描述一种"发送"状态;此时,代码已经调用了xmlhttprequest open()方法并且xmlhttprequest已经准备好把一个请求发送到服务器。
2 描述一种"发送"状态;此时,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应。
3 描述一种"正在接收"状态;此时,已经接收到http响应头部信息,但是消息体部分还没有完全接收结束。
4 描述一种"已加载"状态;此时,响应已经被完全接收。
status属性:这个status属性描述了http状态代码,而且其类型为short。而且,仅当readystate值为3(正在接收中)或4(已加载)时,这个status属性才可用。当readystate的值小于3时试图存取status的值将引发一个异常。
responsetext属性:这个responsetext属性包含客户端接收到的http响应的文本内 容。当readystate值为0、1或2时,responsetext包含一个空字符串。当readystate值为3(正在接收)时,响应中包含客户 端还未完成的响应信息。当readystate为4(已加载)时,该responsetext包含完整的响应信息。
statustext属性:这个statustext属性描述了http状态代码文本;并且仅当readystate值为3或4才可用。当readystate为其它值时试图存取statustext属性将引发一个异常。
这个就解决了我当时的疑问:为什么xmlhttp.readystate==4一定要是4呢,是1000不行么,这就告诉我,不行!。
问题2:至于那个status==200,这里有个解释:ajax中,xmlhttprequest对象的status属性一般用来返回服务器的http状态码。status为200表示“成功”,status为404代表“页面未找到”。
很多书上都是这样写的,一点也不错。但是,有时候,特别是刚开始学ajax的时候,可能会将代码直接在本地运行。这样就出现问题了。如果在本地运行
(c:ajax helloworld.htm),那么status属性不管是在“成功”还是“页面未找到”的情况下,都返回的是0,而不是200和404。这个时候如果 还
用if(xmlhttp.status==200)来判断运行,则会毫无结果。所以如果要在本地测试,最好写成if(xmlhttp.status== 200 || xmlhttp.status==0)的形式来判断。
这里有几个参数
xmlhttprequest对象的status属性的取值长整形标准http状态码,定义如下:
问题3:ajax里的onreadystatechange的作用
发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态,xmlhttprequest对象提供了onreadystatechange事件实现这一功能。这类似于回调函数的做法。
onreadystatechange事件可指定一个事件处理函数来处理xmlhttprequest对象的执行结果,如:
ajaxobj=createajaxobject();
var url="/mytodoes/fetchtext?id="+id;
ajaxobj.open("get",url,true);
ajaxobj.onreadystatechange=changetabcallback;
ajaxobj.send(null);
onreadystatechange事件是在readystate属性发生改变时触发的,readystate的值表示了当前请求的状态,在事件处理程序中可以根据这个值来进行不同的处理。 readystate有五种可取值0:尚未初始化,1:正在加载,2:加载完毕,3:正在处理;4:处理完毕。一旦readystate属性的值变成了4,就可以从服务器返回的响应数据进行访问了。
通常在事件中判断readystate的值是在请求完毕时才做处理,如:
function changetabcallback(){
if(ajaxobj.readystate==4){
// 下一步验证
}
}
status存储了服务器端返回的http请求响应代码,它表示请求的处理结果,常见响应代码的含义如右。
在ajax开发中,最常用就是200这个响应码,代码如下:
function changetabcallback(){
if(ajaxobj.readystate==4){
if(ajaxobj.status==200){
// 服务端返回了正确数据,开始响应处理
}
}
}
http状态码 含义
200 请求成功
202 请求被接受但处理未完成
400 错误请求
404 请求资源未找到
500 内部服务器错误
以上是关于7.11随笔的主要内容,如果未能解决你的问题,请参考以下文章