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五种状态的介绍,我认为还是《Pragmatic Ajax A Web 2.0 Primer 》比较到位,因为它提到了对接收到的数据的解析问题,其他书中都没有提到这一点,而这一点正是“(3)交互”阶段作为一个必要的转换过程存在于“(2)载入完成”到“(4)完成”之间的理由,也就是其任务是什么。归结起来,我觉得比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”表达模式来对这几个状态进行定义比较准确,而且让人容易理解。现试总结如下:
概而括之,整个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的核心部分有一个真正简单明了的理解。
本博PS:readyState一般用在异步请求时程序响应的判断,Iframe, javaScript脚本同样适用,参考另一篇文章:http://d-tune.javaeye.com/blog/506074
文章出处:http://www.cn-cuckoo.com/2007/07/16/the-details-for-five-states-of-readystate-9.html
转载于:https://www.cnblogs.com/myssh/archive/2009/12/18/1627368.html
readyState的五种状态详解【转】相关推荐
- 线程池的五种状态详解
线程池的5种状态:Running.ShutDown.Stop.Tidying.Terminated. 概述 最好的学习方式就是看源码,众所周知,创建线程池肯定会使用到ThreadPoolExecuto ...
- 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。
本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...
- Java 解析线程的几种状态详解
Java 解析线程的几种状态详解 1. 线程的5种状态 从操作系统层面上,任何线程一般都具有五种状态,即创建.就绪.运行.阻塞.终止. (1) 新建状态(NEW) 在程序中用构造方法创建一个新线程时, ...
- AJAX请求时status返回状态明细表 readyState的五种状态
为什么80%的码农都做不了架构师?>>> 在<Pragmatic Ajax A Web 2.0 Primer >中偶然看到对readyStae状态的介绍,感觉这个介 ...
- XMLHTTP.readyState的五种状态
XMLHTTP.readyState的五种就绪状态: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现 ...
- Android特效 五种Toast详解
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.而且Toast主要用于向用户显示提示消 ...
- java clone方法_干货满满:Java中创建对象的五种方式详解
通常来说,对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为. 作为Java开发者,我们通常都是使用依赖管理系统,比如Spring去创建Java对象,但使用管理系统创建对象并不是唯一 ...
- Redis五种数据结构详解
Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. Redis的五种数据结构包括以下五种: String:字符串类型 List ...
- Redis五种数据类型详解
redis数据类型分为:字符串类型.散列类型.列表类型.集合类型.有序集合类型. redis这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作. 原子操作:最小的操作单位, ...
最新文章
- 中科院团队用算法追上谷歌“量子霸权”:谷歌量子处理器并没有比E级超算快...
- Activity、View、Window、DecorView的关系
- PAT甲级1046 Shortest Distance:[C++题解]前缀和
- pug模板引擎(原jade)
- MUI 列表组件:文字居左中右(排版) - 代码篇
- Golang 实现求素数【 输入N,求N内素数个数 】
- iPhone 14 Pro系列传出好消息,有望实现8GB内存自由
- 【Elasticsearch】Elasticsearch analyzer 分词器
- 【JVM】垃圾回收器
- php添加导航和删除导航,新增/修改/删除ECSHOP后台左侧导航菜单
- Codeforces Round #716 (Div. 2) C. Product 1 Modulo N
- 2019秋季学期第2周Java学习总结
- WPF触发器(Trigger、DataTrigger、EventTrigger)
- vim命令模式下粘贴内容
- 解决 Evernote 印象笔记中代码语法高亮
- 文件上传服务器方法,向服务器上传文件方法
- Python绘制XRD图谱和对应pdf卡片堆叠图
- 行满秩矩阵为何变成增广矩阵还为满秩
- You Only Look Once: Unified, Real-Time Object Detection(YOLO论文中英同步翻译)
- 15、react 的 非受控组件 和 受控组件
热门文章
- 05.序列模型 W3.序列模型和注意力机制
- LeetCode 第 206 场周赛(733/4491,前16.3%)
- LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)
- LeetCode 519. 随机翻转矩阵(哈希)
- LeetCode 672. 灯泡开关 Ⅱ(枚举)
- LeetCode 202. 快乐数(快慢指针)
- 文献阅读:知识图谱数据管理研究综述
- 用 Kaggle 经典案例教你用 CNN 做图像分类!
- 计算机设备报废流程图,报废流程图.ppt
- spark调用python_在MRS集群中使用Python3.7运行PySpark程序,调用RDD的take函数报错处理...