`
newleague
  • 浏览: 1475039 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

XMLHTTP.readyState的五种状态

阅读更多

对于readyState的五种状态的描述或者说定义,很多Ajax书(英文原版)中大都语焉不详

在《Pragmatic Ajax A Web 2.0 Primer 》中偶然看到对readyStae状态的介绍,感觉这个介绍很实在……

比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”的表达模式来对这几个状态进行定义

【全文】

在《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》中,则用下表进行了说明:

 

表1. readyState Levels

 

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)完成”之间的理由,也就是其任务是什么。归结起来,我觉得比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”表达 模式来对这几个状态进行定义比较准确,而且让人容易理解。现试总结如下:

 

表2. readyState 状态详解

 

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的核心部分有一个真正简单明了的

分享到:
评论

相关推荐

    AJAX的使用方法详解

    AJAX作为异步传输,局部刷新非常方便,用处很广! 首先,对于AJAX的使用有4步: 1.创建AJAX对象 var xmlHttp = new ... if (xmlHttp.readyState==4 && xmlHttp.status==200) { } } 4.发送请求 xmlHttp.send(null);

    XMLHttpRequest

    1.readyState属性 readyState:只读属性。 作用:通过读取该属性,从而知道XMLHttpRequest 目前进行到了哪一步 取值: 状态码 名称 描述 0 未初始化 默认状态,XMLHttpRequest刚刚被创建 1 打开 调用了对象的...

    XMLHttpRequest处理xml格式的返回数据(示例代码)

    接收响应数据 //判断对象的状态是交互完成 if (xmlhttp.readyState == 4) { //判断http的交互是否成功 if (xmlhttp.status == 200) { //使用responseXML的方式来接收XML数据对象的DOM对象 var domObj = ...

    ajax 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 ...

    Microsoft.XMLHttp组件的属性方法

    Microsoft.XMLHttp组件的属性方法 XMLHTTP对象中的readyState属性其能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法

    Microsoft ADO Msxml2.ServerXMLHTTP Msxml2.XMLHTTP 程序员参考手册中文版CHM

    readyState 表示当前请求的状态,只读。 responseStream 表示一个作为Ado.Stream对象的应答实例,只读。 responseText 表示一个作为字符串的应答实例,只读。 responseXML 表示一个经MSXML解析过的应答实例,只读...

    javascript中ajax应用

    script> function hq () {var xml; if(window.XMLHttpRequest) xml=new XMLHttpRequest(); else xml=new ActiveXObject("Microsoft... {if(xml.readyState==4&&xml.status==200)//当前状态是已结束时和请求成功时

    易语言XMLHTTP类模块

    易语言XMLHTTP类模块源码,XMLHTTP类模块,Status,StatusText,ResponseXML,ResponseText,ResponseBody,ResponseStream,ReadyState,onreadystatechange,Open,SetRequestHeader,GetResponseHeader,GetAllResponseHeaders...

    Ajax技术课件,保密资料下载

    * var xhr = new ActiveXObject("Microsoft.XMLHTTP"); var xhr = new ActiveXObject("MSXML2.5.0.XMLHTTP"); var xhr = new ActiveXObject("MSXML2.4.0.XMLHTTP"); 2 xhr相关的方法 建立连接 xhr.open(...

    ajax+php打造进度条 readyState各状态

    readyState == 状态(0,1,2,3,4) 0:请求未初始化,还没调用open 1:请求已经建立,但还没有发送,还没调用send 2:请求已发送,并且正在处理 3:请求正在处理,通常响应中已有部分数据可调用 4:完毕 复制代码 代码...

    ajax+php打造进度条代码[readyState各状态说明]

    readyState == 状态(0,1,2,3,4) 0:请求未初始化,还没调用open 1:请求已经建立,但还没有发送,还没调用send 2:请求已发送,并且正在处理 3:请求正在处理,通常响应中已有部分数据可调用 4:完毕 复制代码 代码...

    ajax运用实例得到的得到

    if (XMLHttpReq.readyState == 4) { // 判断对象状态 if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息 var res=XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data; ...

    jsp ajax实例

    if (XMLHttpReq.readyState == 4) { // 判断对象状态 if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息 var res=XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data; ...

    AJAX开发简略.pdf

    if (http_request.readyState == 4) { // 判断对象状态 if (http_request.status == 200) { // 信息已经成功返回,开始处理信息 alert(http_request.responseText); } else { //页面不正常 alert(...

    探讨Ajax中有关readyState(状态值)和status(状态码)的问题

    先看下面一段代码,然后给大家详细介绍,Ajax中有关readyState(状态值)和status(状态码)的问题,具体内容如下所示: var getXmlHttpRequest = function () { try{ //主流浏览器提供了XMLHttpRequest对象 return ...

    一个客户端的验证小程序ajax

    //第五步 发送请求 (输入数据) req.send(); //var newName ="uname=" + document.f3.uname.value; //req.send(newName); } //创建XMLHttpRequest对象 function createXMLHttpRequest() { if(window....

    易语言XMLHTTP类模块例程修改版

    易语言XMLHTTP类模块例程修改版源码,创建,打开,指定请求头数据,取响应头数据,取所有头数据,发送请求,取消当前请求,取状态码,取状态文本,取responseXML,取responseText,取响应数据,取responseStream,取readyState,置...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法,可以自动交换信息,W3C宣称,使用RDF配合数字签名,将使网络中存在"真实可信"的电子商务。 六.显示 单独用XMl不能显示页面,...

    XMLHTTP类模块测试程序

    创建,打开,指定请求头数据,取响应头数据,取所有头数据,发送请求,取消当前请求,取状态码,取状态文本,取responseXML,取responseText,取响应数据,取responseStream,取readyState,置onreadystatechange,open,...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type ... 捕获释放 event.srcElement.setCapture();...event.srcElement.releaseCapture();... 根据鼠标获得元素: document....

Global site tag (gtag.js) - Google Analytics