我必須爲我的ajax調用(POST)設置自定義請求標頭。由於我在客戶/服務器框架(ZK)背後,我無法掌握整個過程(從open()到send())。這就是爲什麼我只能設置請求頭如下,覆蓋本地的「onsomething」功能:XMLHttpRequest:Firefox問題「setRequestHeader」
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執行xhr.setRequestHeader(...)
時仍然等於1。
然而,無論是使用Chrome還是Firefox,zk_native_function_to_create_a_xhr_OLD()
都會返回一個XMLHttpRequest對象(具有相同的默認屬性)的實例。
這兩個調用,即。 Chrome和Firefox上的send()
是異步製作的。 更有甚者,當我取消對螢火蟲的斷點,我行xhr.setRequestHeader
似乎是因爲在執行時我得到控制檯下面的錯誤要達到:
InvalidStateError:試圖使用一個對象,是不是,或不再可用
在我看來,這是因爲在調用xhr.setRequestHeader()時,xhr.readyState已經等於'4'...它的值從1變爲4,速度爲生活!
我該如何解決這個問題?還是有另一種方法,我可以叫「xhr.setRequestHeader()」,或者在另一個「prototypable」 onsomething處理?
非常感謝。
剛剛成立的頭之前發送請求。 – Musa