4

您是否曾经使用过 XHR 对象以onreadystatechange不同于readyState“4”(完整)的方式进行拦截?

我很想知道您是否曾经触发过具有可能不同值的函数。我无法想象其他状态的真正用途。它们对做某事有用吗?

如果有的话可以举一些实际的例子吗?

我说的是这些

  • 0:请求未初始化
  • 1:服务器连接建立
  • 2:收到请求
  • 3:处理请求
  • 4:请求完成,响应就绪
4

1 回答 1

3

我在我为通知目的开发的 Intranet 上使用它。通过拦截状态 3,我可以通知用户请求已开始。

我还用它来计算请求传输时间。我显示状态 3 和 4 之间经过的时间。

由于我使用 MooTools,我扩展了 Request 类来触发 onStateChange 事件:

var EarlyRequest = new Class({Extends: Request,
 onStateChange: function() {
  this.fireEvent("onStateChange", [this.xhr.readyState]);
  this.parent();
 }
});

在附加说明。您发布的状态定义(来自 w3cschools)具有误导性,这些对我来说更清楚(来自http://www.w3.org/TR/XMLHttpRequest/#states):

  • UNSENT (数值 0) 对象已被构造。

  • OPENED(数值 1) open() 方法已成功调用。在此状态期间,可以使用 setRequestHeader() 设置请求标头,并且可以使用 send() 方法发出请求。

  • HEADERS_RECEIVED(数值 2) 已遵循所有重定向(如果有)并且已收到最终响应的所有 HTTP 标头。该对象的几个响应成员现在可用。

  • LOADING(数值 3) 正在接收响应实体主体。

  • DONE(数值 4) 数据传输已完成或传输过程中出现问题(例如无限重定向)。

于 2010-12-22T14:21:29.453 回答