我必须为我的 ajax 调用 (POST) 设置自定义请求标头。由于我在客户端/服务器框架(ZK)后面,我无法掌握整个过程(从 open() 到 send())。这就是为什么我只能按如下方式设置请求标头,覆盖本机“onsomething”函数:
var zk_native_function_to_instanciate_a_xhr_OLD = zk_native_function_to_instanciate_a_xhr();
zk_native_function_to_instanciate_a_xhr = function() {
var xhr = zk_native_function_to_instanciate_a_xhr_OLD ();
xhr.onloadstart = function () {
if (xhr.readyState === 1) {
xhr.setRequestHeader("XX-MY-CUSTOM-HEADER", "foobarhimself");
}
}
};
这在使用 Chrome 时效果很好,但在 Firefox 上根本不起作用。关键是使用 Firefox,当我在 'if' 行放置断点时,我只会准备好状态 4。使用 Chrome,我的断点成功停止,xhr.readyState
等于 '1' ( xhr.OPENED
),并且 xhr.readyState 在执行时仍然等于 1 xhr.setRequestHeader(...)
。
然而,无论是 Chrome 还是 Firefox,zk_native_function_to_create_a_xhr_OLD()
都会返回一个 XMLHttpRequest 对象的实例(具有相同的默认属性)。
两个电话,即。在send()
Chrome 和 Firefox 上是异步制作的。最重要的是,当我删除 firebug 上的断点时,我的行xhr.setRequestHeader
似乎已到达,因为执行时我在控制台上收到以下错误:
InvalidStateError:尝试使用不可用或不再可用的对象
在我看来,这是因为在调用 xhr.setRequestHeader() 时,xhr.readyState 已经等于 '4'......它的值以生命的速度从 1 变为 4!
我该如何解决这个问题?还是有另一种方法可以调用“xhr.setRequestHeader()”,或者在另一个“原型” onsomething 处理程序中?
非常感谢。