快捷搜索:

readyState的五种状态详解

在《Pragmatic Ajax A Web 2.0 Primer 》中对readyStae状态的先容,摘译如下:

0: (Uninitialized) the send( ) method has not yet been invoked.

1: (Loading) the send( ) method has been invoked, request in progress.

2: (Loaded) the send( ) method has completed, entire response received.

3: (Interactive) the response is being parsed.

4: (Completed) the response has been parsed, is ready for harvesting.

0 - (未初始化)还没有调用send()措施

1 - (载入)已调用send()措施,正在发送哀求

2 - (载入完成)send()措施履行完成,已经接管到整个相应内容

3 - (交互)正在解析相应内容

4 - (完成)相应内容解析完成,可以在客户端调用了

对付readyState的这五种状态,其他书中大年夜都语焉不详。像《Foundations of Ajax》中,只在书中的表2-2简单地枚举了状态的“名称”--The state of the request. The five possible values are 0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, and 4 = complete。而《Ajax in Action》中似乎根本就没有提到这5种状态的细节。

《Professional Ajax》中虽不尽人意,但照样有可取之处:

There are five possible values for readyState:

0 (Uninitialized): The object has been created but the open() method hasn’t been called.

1 (Loading): The open() method has been called but the request hasn’t been 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 has been closed.

readyState有五种可能的值:

0 (未初始化): (XMLHttpRequest)工具已经创建,但还没有调用open()措施。

1 (载入):已经调用open() 措施,但尚未发送哀求。

2 (载入完成): 哀求已经发送完成。

3 (交互):可以接管到部分相应数据。

4 (完成):已经接管到了整个数据,并且连接已经关闭。

在《Understanding AJAX: Using JavaScript to Create Rich Internet Applications》中,则用下表进行了阐明:

readyState Status Code

Status of the XMLHttpRequest Object

(0) UNINITIALIZED未初始化

The object has been created but not initialized. (The open method has not been called.)

(XMLHttpRequest)工具已经创建,但尚未初始化(还没有调用open措施)。

(1) LOADING载入

The object has been created, but the send method has not been called.

(XMLHttpRequest)工具已经创建,但尚未调用send措施。

(2) LOADED载入完成

The send method has been called, but the status and headers are not yet available.

已经调用send措施,(HTTP相应)状态及头部还弗成用。

(3) INTERACTIVE交互

Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available.

已经接管部分数据。但若在此时调用responseBody和responseText属性获取部分结果将会孕育发生差错,由于状态和相应头部还不完全可用。

(4) COMPLETED完成

All the data has been received, and the complete data is available in the responseBody and responseText properties.

已经接管到了整个数据,并且在responseBody和responseText属性中可以提取到完备的数据。

根据以上几本书中的关于readyState五种状态的先容,我觉得照样《Pragmatic Ajax A Web 2.0 Primer 》对照到位,由于它提到了对接管到的数据的解析问题,其他书中都没有提到这一点,而这一点恰是“(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核心的神秘感(语焉不详的背后要么是故弄玄虚,制造神秘感;要么便是“以其昏昏,使人昭昭”),迅速把握其实质,对削减进修中的挫折感和增强自大心都极其有益。

比如,经由过程如下示例:

//声明数组

var states = ["正在初始化……",

"正在初始化哀求……成功!

正在发送哀求……",

"成功!

正在接管数据……",

"完成!

正在解析数据……",

"完成!

"];

//回调函数内部代码片段

if (xmlHttp.readyState==4)

{

var span = document.createElement(“span”);

span.innerHTML = states[xmlHttp.readyState];

document.body.appendChild(span);

if (xmlHttp.status == 200)

{

var xmldoc = xmlHttp.responseXML;

//其他代码

}

//别忘怀销毁,防止内存透露

xmlHttp = null;

}

else

{

var span = document.createElement(“span”);

span.innerHTML = states[xmlHttp.readyState];

document.body.appendChild(span);

}

结果如下:

正在初始化哀求……成功!

正在发送哀求……成功!

正在接管数据……完成!

正在解析数据……完成!

我们很轻易明白XMLHttpRequest工具在各个阶段都在做什么。是以,也就很轻易对Ajax的核心部分有一个真正简单清楚明了的理解。

附:

Example 1

readyState返回XMLHTTP哀求确当前状态

语法lValue = oXMLHttpRequest.readyState;

var XmlHttp;

XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

function send() {

XmlHttp.onreadystatechange = doHttpReadyStateChange;

XmlHttp.open("GET", "http://localhost/sample.xml", true);

XmlHttp.send();

}

function doHttpReadyStateChange() {

if (XmlHttp.readyState == 4) {

alert("Done");

}

}

备注变量,此属性只读,状态用长度为4的整型表示.定义如下:

0 (未初始化) 工具已建立,然则尚未初始化(尚未调用open措施)

1 (初始化) 工具已建立,尚未调用send措施

2 (发送数据) send措施已调用,然则当前的状态及http头未知

3 (数据传送中) 已接管部分数据,由于相应及http头不全,这时经由过程responseBody和responseText获取部分数据会呈现差错,

4 (完成) 数据接管完毕,此时可以经由过程经由过程responseBody和responseText获取完备的回应数据

Example 2

下面这个典型阐明若何在运行时以 VBScript 代码读取 RDS.DataControl 工具的 ReadyState 属性。ReadyState 为只读属性。

要测试该典型,请剪切该代码并粘贴到标准 HTML 文档的标记之间,然后将其命名为“ADCapi9.asp”,ASP 脚本将标识办事器。

RDS API Code Examples

RDS.DataControl ReadyState property

">

Sub Window_OnLoad

Select Case ADC1.ReadyState

case 2: MsgBox "Executing Query"

case 3: MsgBox "Fetching records in background"

case 4: MsgBox "All records fetched"

End Select

End Sub

您可能还会对下面的文章感兴趣: