菜单

ajax readyState的五种植状态详解

2018年11月15日 - Ajax

于《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 = [“正在初始化……”,
“正在初始化请求……成功!<br/>正在发送请求……”,
“成功!<br/>正在接收数据……”,
“完成!<br/>正在分析数据……”,
“完成!<br/>”];
//回调函数内部代码有
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 文档的
<Body></Body> 标记之间,然后以那个命名为“ADCapi9.asp”,ASP
脚本将标识服务器。
程序代码
<Center>
<H2>RDS API Code Examples </H2>
<HR>
<H3> RDS.DataControl ReadyState property</H3>
</Center>
<!– 在运转时设置参数的 RDS.DataControl –>
<OBJECT classid=”clsid:BD96C556-65A3-11D0-983A-00C04FC29E33″
ID=ADC>
<PARAM NAME=”SQL” VALUE=”Select * from Employee for browse”>
<PARAM NAME=”SERVER”
VALUE=”http://&lt;%=Request.ServerVariables("SERVER\_NAME")%&gt;"&gt;
<PARAM NAME=”CONNECT”
VALUE=”dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;”>
<PARAM NAME=”ExecuteOptions” VALUE=”adcExecAsync”>
<PARAM NAME=”FetchOptions” VALUE=”adcFetchAsync”>
</OBJECT>
<Script Language=”VBScript”>
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
</Script>

于《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 = [“正在初始化……”,
“正在初始化请求……成功!<br/>正在发送请求……”,
“成功!<br/>正在接收数据……”,
“完成!<br/>正在分析数据……”,
“完成!<br/>”];
//回调函数内部代码有
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 文档的
<Body></Body> 标记之间,然后以那个取名也“ADCapi9.asp”,ASP
脚本将标识服务器。
程序代码
<Center>
<H2>RDS API Code Examples </H2>
<HR>
<H3> RDS.DataControl ReadyState property</H3>
</Center>
<!– 以运作时设置参数的 RDS.DataControl –>
<OBJECT classid=”clsid:BD96C556-65A3-11D0-983A-00C04FC29E33″
ID=ADC>
<PARAM NAME=”SQL” VALUE=”Select * from Employee for browse”>
<PARAM NAME=”SERVER”
VALUE=”http://&lt;%=Request.ServerVariables("SERVER\_NAME")%&gt;"&gt;
<PARAM NAME=”CONNECT”
VALUE=”dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;”>
<PARAM NAME=”ExecuteOptions” VALUE=”adcExecAsync”>
<PARAM NAME=”FetchOptions” VALUE=”adcFetchAsync”>
</OBJECT>
<Script Language=”VBScript”>
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
</Script>

若或许感兴趣的篇章:

http://www.bkjia.com/AJaxjc/329014.htmlwww.bkjia.comtruehttp://www.bkjia.com/AJaxjc/329014.htmlTechArticle在《Pragmatic Ajax A Web 2.0 Primer
》中对readyStae状态的介绍,摘译如下: 0: (Uninitialized) the send( )
method has not yet been invoked. 1: (Loading) the send( ) me…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图