0: Uninitialized the send method has not yet been invoked.
1: Loading the send method has been invoked, requestinprogress.
2: Loaded the send method has completed, entireresponsereceived.
3: Interactive the response is being parsed.
4: Completed the response has been parsed, is readyforharvesting.
0 - 未初始化还没有调用send方法
1 - 载入已调用send方法,正在发送请求
2 - 载入完成send方法执行完成,已经接收到全部响应内容
3 - 交互正在解析响应内容
4 - 完成响应内容解析完成,可以在客户端调用了
对于readyState的这五种状态,其他书中大都语焉不详。像《FoundationsofAJAX》中,只在书中的表2-2简单地列举了状态的“名称”--The state of the request. Thefivepossible values are 0 = uninitialized, 1 = loading, 2 = loaded,3 =interactive, and 4 = complete。而《AJAXinAction》中好像根本就没有提到这5种状态的细节。
《Professional Ajax》中虽不尽人意,但还是有可取之处:
There are five possible values for readyState:
0 Uninitialized: The t has been created but the open methodhasn’tbeen called.
1 Loading: The open method has been called but the requesthasn’tbeen sent.
2 Loaded: The request has been sent.
3 Interactive. A partial response has been received.
4 Complete: All data has been received and the connection hasbeenclosed.
readyState
有五种可能的值:
0 未初始化: XMLHttpRequest对象已经创建,但还没有调用open方法。
1 载入:已经调用open 方法,但尚未发送请求。
2 载入完成: 请求已经发送完成。
3 交互:可以接收到部分响应数据。
4 完成:已经接收到了全部数据,并且连接已经关闭。
在《Understanding AJAX: Using t to Create RichInternetApplications》中,则用下表进行了说明:
readyState
Status Code
Status of the XMLHttpRequest t
0 UNINITIALIZED 未初始化
The t has been created but not initialized. The open methodhasnot been called.
XMLHttpRequest对象已经创建,但尚未初始化还没有调用open方法。
1 LOADING 载入
The t has been created, but the send method has notbeencalled.
XMLHttpRequest对象已经创建,但尚未调用send方法。
2 LOADED 载入完成
The send method has been called, but the status and headersarenot yet available.
已经调用send方法,HTTP响应状态及头部还不可用。
3 INTERACTIVE 交互
Some data has been received. Calling the responseBodyandresponseText properties at this state to obtain partialresultswill return an error, because status and response headersare notfully available.
已经接收部分数据。但若在此时调用responseBody和responseText属性获取部分结果将会产生错误,因为状态和响应头部还不完全可用。
4 COMPLETED 完成
All the data has been received, and the complete data isavailablein the responseBody and responseText properties.
已经接收到了全部数据,并且在responseBody和responseText属性中可以提取到完整的数据。
根据以上几本书中的关于readyState五种状态的介绍,我认为还是《Pragmatic AJAX A Web2.0Primer》比较到位,因为它提到了对接收到的数据的解析问题,其他书中都没有提到这一点,而这一点正是“3交互”阶段作为一个必要的转换过程存在于“2载入完成”到“4完成”之间的理由,也就是其任务是什么。归结起来,我觉得比较理想的解释方法应该以“状态:任务目标+过程+表现或特征”表达模式来对这几个状态进行定义比较准确,而且让人容易理解。
现试总结如下:
readyState
状态 状态说明
0未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。
1载入
此阶段对XMLHttpRequest对象进行初始化,即调用open方法,根据参数method,url,true完成对象状态的设置。并调用send方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
2载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
3交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
4完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。
概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:
创建-初始化请求-发送请求-接收数据-解析数据-完成
在具体应用中,明确了readyState的五个状态XMLHttpRequest对象的生命周期各个阶段的含义,就可以消除对AJAX核心的神秘感语焉不详的背后要么是故弄玄虚,制造神秘感;要么就是“以其昏昏,使人昭昭”,迅速把握其实质,对减少学习中的挫折感和增强自信心都极其有益。
比如,通过如下示例:
以下是引用片段:
//声明数组
varstates=正在初始化……,
正在初始化请求……成功!
正在发送请求……,
成功!
正在接收数据……,
完成!
正在解析数据……,
完成!
;
//回调函数内部代码片段
ifxmlHttp.readyState4
span.innerHTML=statesxmlHttp.readyState;
ifxmlHttp.status200
varxmldoc=xmlHttp.responseXML;
//其他代码
//别忘记销毁,防止内存泄漏
xmlHttp=null;
else
span.innerHTML=statesxmlHttp.readyState;
结果如下:
以下是引用片段:
正在初始化请求……成功!
正在发送请求……成功!
正在接收数据……完成!
正在解析数据……完成!
我们很容易明白XMLHttpRequest对象在各个阶段都在做什么。因此,也就很容易对AJAX的核心部分有一个真正简单明了的理解。
附:
Example 1
readyState
返回XMLHTTP请求的当前状态
语法 lValue = oXMLHttpRequest.readyState;
以下是引用片段:
varXmlHttp;
XmlHttp=newActiveXtMsxml2.XMLHTTP.3.0;
nsend
XmlHttp.onreadyStatechange=doHttpreadyStateChange;
XmlHttp.send;
ndoHttpreadyStateChange
ifXmlHttp.readyState4
alertDone;
备注 变量,此属性只读,状态用长度为4的整型表示.定义如下:
0 未初始化 对象已建立,但是尚未初始化尚未调用open方法
1 初始化 对象已建立,尚未调用send方法
2 发送数据 send方法已调用,但是当前的状态及http头未知
3数据传送中已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误
4 完成 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
Example 2
下面这个范例说明如何在运行时以 VBt 代码读取 RDS.DataControl 对象的readyState属性。readyState 为只读属性。
要测试该范例,请剪切该代码并粘贴到标准HTML文档的<Body></Body>标记之间,然后将其命名为“ADCapi9.asp”,ASP脚本将标识服务器。
以下是引用片段:
<Center>
<H2>RDSAPICodeExamples</H2>
<HR>
<H3>RDS.DataControlreadyStateproperty</H3>
</Center>
<!--在运行时设置参数的RDS.DataControl-->
<Tclassid=clsid:BD96C556-65A3-11D0-983A-00C04FC29E33
ID=ADC>
<MNAME=SQLVALUE=Select*fromEmployeeforbrowse>
<MNAME=SERVERVALUE=http://<%=Request.ServerVariablesSERVER_NAME%>>
<MNAME=CONNECTVALUE=dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;>
<MNAME=ExecuteOptionsVALUE=adcExecAsync>
<MNAME=FetchOptionsVALUE=adcFetchAsync>
</T>
<tLanguage=VBt>
SubWindow_OnLoad
SelectCaseADC1.readyState
case2:MsgBoxExecutingQuery
case3:MsgBoxFetchingrecordsinbackground
case4:MsgBoxAllrecordsfetched
EndSelect
EndSub
</t>
1.250定律 拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;
XHTML 里面的img标记应该这样写:img alt= src= /,这种写法也就是所谓的自关闭,在XML中是完全合法的写法。如果你熟悉XML
SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块 原文: SWFObject: Javascript Flash Player detection and emb
以下是JavaScript容易犯错的九个陷阱。虽然不是什么很高深的技术问题,但注意一下,会使您的编程轻松些,即所谓make life
先不说什么是好的用户体验――最差的用户体验是引发了用户不知道该做什么的挫折感。可以从两个方面证明上述判断:第一,从
ins和del 是在HTML4.0时引入的,可以帮助创作者开发文档时相互合作,并且也保持了一些编辑(比如可以反应创作者是一段时间
技术发展会使技术产品的使用变得日益复杂,有时还背离其初衷,走入为技术而技术的误区。因此,如何使产品符合用户需求、方
第一次走到新的办公室,透过落地的巨大玻璃门,可以看到里面的会议室。习惯的去推门,同时脚步并没有停下来。 结果。。。