这里写目录标题
6.2.5 响应状态
异步通信实际上就是不需要刷新的暗部通信方式, 这种方式虽然存在很多优势 , 但是却无法让人直观了解通信的过程和状态。 为了避免客户端被动的等待, XMLHttpRequest 对象定义了 readyState 属性, 该属性可以动态跟踪异步通信的状态。 readyState 属性值说明如表 6.5 所示。
在异步通信过程中, 一旦请求和响应的状态发生变化, 也就是说当 readyState 属性值发生变化时, 就会触发 onreadystatechange 事件处理函数。
readystatechange 是一种特殊的事件类型, 它与 HTTP 传输紧密相关联。 每当 HTTP 请求状态改变时,服务器都会回调客户端的 onreadystatechange 事件处理函数。如果 readyState 属性返回值为 4, 则说明异步请求和响应完毕, 那么就可以放心地读取返回的数据了。
虽然通过 readyState 属性可以确定响应是否完成, 但是还存在另一个问题: 如果服务器完成响应请求,但是报告了一个错误, 此时如果读取响应信息, 也容易发生错误。 为了防止此类意外 , 还应坚待 HTTP 通信状态。 只有当状态码为 200 时, 才表示服务器正确完成响应处理。在 XMLHttpRequest 对象中可以借助 status属性获取当前的 HTTP 状态码。
例如 , 定义一个回调函数, 检测服务器是否已正确完成响应, 然后决定是否读取响应信息。 实现的代码如下:
function response(){
if(xmlhttprequest.readyState == 4){
if (xmlhttprequest.status == 200 || xmlhttprequest.status == O
alert(xmlhttpreq uest. response Text);
}
}
}
然后, 绑定 onreadystatechange 事件处理函数(以 6.2.3 节示例为基础进行演示操作):
<script type="text/javascript">
//省略定义XMLHttpRequest对象
window.onload