XHR readyState


AJAX - onreadystatechange 事件

当发送一个请求后,客户端需要确定这个请求什么时候会完成,因此,XMLHttpRequest对象提供了 onreadystatechange 事件机制来捕获请求的状态,继而实现响应。


onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

属性 描述
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
  1. 0: 请求未初始化
  2. 1: 服务器连接已建立
  3. 2: 请求已接收
  4. 3: 请求处理中
  5. 4: 请求已完成,且响应已就绪
status 200: "OK" 404: 未找到页面

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

实例

xmlhttp.onreadystatechange=function()  
{  
if (xmlhttp.readyState==4 && xmlhttp.status==200)  
{  
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;  
}  
}

注意: onreadystatechange 事件被触发 5 次(0 - 4),对应着 readyState 的每个变化。

提示: XHR.readyState状态的变化如下:

  • 0:请求未初始化,还没有调用 open()。

  • 1:请求已经建立,但是还没有发送,还没有调用 send()。

  • 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。

  • 3:请求在处理中;通常响应中已有部分数据可用了,没有全部完成。

  • 4:响应已完成;您可以获取并使用服务器的响应了。


使用回调函数

回调函数是一种以参数形式传递给另一个函数的函数。

如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个 标准 的函数,并为每个 AJAX 任务调用该函数。

该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

实例

function myFunction()  
{  
loadXMLDoc("ajax_info.txt",function()  
{  
if (xmlhttp.readyState==4 && xmlhttp.status==200)  
{  
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;  
}  
});  
}

在接下来的一个章节中,你将学习到与AJAX ASP/PHP相关的知识!