您是否曾经使用过 XHR 对象以onreadystatechange
不同于readyState
“4”(完整)的方式进行拦截?
我很想知道您是否曾经触发过具有可能不同值的函数。我无法想象其他状态的真正用途。它们对做某事有用吗?
如果有的话可以举一些实际的例子吗?
- 0:请求未初始化
- 1:服务器连接建立
- 2:收到请求
- 3:处理请求
- 4:请求完成,响应就绪
您是否曾经使用过 XHR 对象以onreadystatechange
不同于readyState
“4”(完整)的方式进行拦截?
我很想知道您是否曾经触发过具有可能不同值的函数。我无法想象其他状态的真正用途。它们对做某事有用吗?
如果有的话可以举一些实际的例子吗?
我在我为通知目的开发的 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) 数据传输已完成或传输过程中出现问题(例如无限重定向)。