ajax readyState的五种状态详解

2019-09-14 07:19:29于海丽

{
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://<%=Request.ServerVariables("SERVER_NAME")%>">
<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"