- 浏览: 1501067 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
对于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》中,则用下表进行了说明:
(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)完成”之间的理由,也就是其任务是什么。归结起来,我觉得比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”表达 模式来对这几个状态进行定义比较准确,而且让人容易理解。现试总结如下:
(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的核心部分有一个真正简单明了的
发表评论
-
20 个非常有用的jQuery 工具提示插件
2011-09-05 10:16 1109http://www.oschina.net/news/210 ... -
55 个 jQuery 表单插件
2011-08-29 14:46 1217http://www.oschina.net/news/208 ... -
jquery(百科解释)
2011-08-04 17:08 1176Jquery是继prototype之后又一个优秀的Javasc ... -
常用jquery方法大全
2011-07-18 14:17 3常用jquery方法大全.docx -
几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr
2011-07-06 11:34 1859Ajaxian在2007年底对Ajax工具进行了调查,部分调查 ... -
Web前端开发工程师必读的15个设计博客
2011-03-01 18:01 1345http://sd.csdn.net/a/20110301/2 ... -
jquery-web素材
2011-01-21 14:33 1219http://www.htmldrive.net -
Web设计师值得收藏的10个jQuery特效
2010-12-28 10:43 1550jQuery已经不是什么新鲜的事儿,以前总把它认为是非 ... -
反向ajax
2010-12-17 17:49 1277http://192.168.17.114:8080/dwr/ ... -
$.ready()
2010-12-06 16:40 755$(document).ready(function(){ ... -
JQuery中each()的使用方法说明
2010-12-03 11:02 1709JQuery中的each函数在1.3.2的官方文档中的描述如下 ... -
flot
2010-11-29 22:12 1619flot 是一个基本于Jquery的开源Javascript库 ... -
Jquery Messager右下角弹出消息插件
2010-11-29 17:38 2303http://www.94this.com.cn/myCode ... -
JS制作网页的FISHEYE效果
2010-11-03 11:30 1438http://d.download.csdn.net/down ... -
常用jquery方法大全
2010-09-29 11:48 1706更详细的见附件 jQuery中常用的函数方法总结 j ... -
js offsetHeight offsetWidth 解说
2010-09-17 10:42 19445scrollHeight: 获取对象的滚动高度。 scrol ... -
slideup()和slideDown()方法的使用
2010-09-17 10:21 2957最近比较闲,并且前段时间因为一个JQuery的问题卡的很是头疼 ... -
jQuery中的Ajax几种请求方法
2010-08-09 14:04 1978jQuery确实是一个挺好的轻量级的JS框架,能帮助我 ... -
通过jquery实现ajax调用
2010-08-06 16:12 1593要素:struts1 一、 1、test.jsp < ... -
相关知识
2010-08-05 16:17 13091、英文指南http://www.visualjquery.c ...
相关推荐
3. **处理响应**:通过`ReadyState`属性监控请求状态,当`ReadyState`为4(表示请求完成)且`Status`为200(表示成功)时,可以通过`ResponseText`或`ResponseXML`属性获取服务器响应的数据,前者为文本形式,后者为...
6. **readyState** 属性:表示请求的当前状态,从0到4,0表示请求未初始化,4表示请求已完成且响应已就绪。 7. **onreadystatechange** 事件:当readyState属性改变时触发,常用于检查请求是否完成并处理响应数据。...
- 使用 `Do...Loop` 循环检查 `xmlHttp.ReadyState` 的状态,直到请求完成或超时。 - `DoEvents` 语句使得控制权短暂地交给操作系统,以便可以处理其他事件。 6. **响应处理**: - 如果 `xmlHttp.ResponseText` ...
- `readyState`:表示请求的状态,共有五种状态,0表示未初始化,1表示已创建,2表示已发送,3表示接收中,4表示完成。 - `status`:返回HTTP请求的状态码,如200表示成功,404表示未找到资源,500表示服务器内部...
`readyState`属性有五个不同的状态值,分别代表了请求的不同阶段: 1. `0 (UNSENT)`:XMLHttpRequest对象已经创建,但还没有调用`open()`方法。 2. `1 (OPENED)`:`open()`方法已经被调用,但请求还没有发送。 3. `...
"xmlhttp.rar_刷新 数据库"这个压缩包文件很可能包含了一个关于如何使用XHR对象从数据库获取数据的示例。 在Web应用中,用户通常希望页面能够快速响应,而无需等待整个页面重新加载。这就是XHR发挥作用的地方。...
`readyState`属性表示请求的五个阶段,0-4分别代表未初始化、已连接、头部已接收、响应体加载中、完成。通常关注`readyState == 4`,即请求已完成。 6. **获取响应信息**:`status`属性返回HTTP状态码,如200表示...
`xmlhttp.readyState`表示请求状态,4表示完成;`xmlhttp.status`为HTTP状态码,200表示成功。 三、处理响应 响应数据通常以文本或XML形式返回。通过`xmlhttp.responseText`获取文本,`xmlhttp.responseXML`获取XML...
if (xmlhttp.readyState == 4) { myButton.disabled = false; alert("Result=" + xmlhttp.responseText); } } ``` 2. **`readyState`**: - **作用**:表示请求/响应过程中的当前活动阶段。 - **取值**: ...
这些状态码分为五类:1xx(信息性响应)、2xx(成功响应)、3xx(重定向响应)、4xx(客户端错误)以及5xx(服务器错误)。接下来将详细介绍这些状态码。 ##### 1xx 信息性响应 - **100 Continue**:表示客户端...
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById("myDiv").innerHTML = xmlhttp.responseText; } } ``` 使用AJAX技术可以实现客户端和服务器之间的异步通信,提高Web应用程序...
5. `readyState`属性:表示请求的当前状态,从0到4,4代表完成。 6. `status`属性:返回HTTP状态码,如200表示成功,404表示未找到资源。 7. `responseText`和`responseXML`属性:分别获取响应的文本和XML格式数据。...
AJAX(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用的技术,它使得网页可以在无需刷新整个页面的情况下,仅更新部分数据。这种技术极大地提升了用户体验,因为它减少了等待时间和页面跳转,使得...
当请求完成,即 `xmlHttp.readyState` 变为4(表示请求已完成),并且 `xmlHttp.status` 是200(表示服务器成功返回)时,我们可以读取并处理服务器返回的数据。在示例中,`handleStateChange()` 函数检查响应文本...
`XmlHttp.readyState`属性表示请求的状态,`XmlHttp.onreadystatechange`事件处理函数会在状态改变时被调用。 3. **AJAX发送请求**:`Ajax.Send`方法负责向服务器发送请求。`XmlHttp.open("GET", url, true)`开启一...
1. **状态检查**:在处理响应时,需要检查`readyState`和`status`属性来确保请求已完成且响应成功。 2. **编码问题**:在传递参数时,最好使用`encodeURIComponent`来处理参数,以避免乱码问题。 3. **跨域问题**:...
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { document.getElementById('result').innerHTML = xmlHttp.responseText; } }; ``` - `readyState`属性表示请求/响应过程中的不同状态: - **0**:...