這個問題是關係到我之前的問題: Is READYSTATE_LOADED across browsers?如何判斷XHR是否使用readyState發送到服務器?
所以我知道的readyState是不是跨瀏覽器可靠。我目前只是試圖在任何瀏覽器中做一個概念驗證。
我在我的插件,並有這樣的代碼:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
self._onComplete(id, xhr);
}
else if (xhr.readyState == 2){
self._onSent(id, xhr);
}
};
如果我登錄的回調,馬上「完全」,經過我的服務器端腳本響應之前「已發送」的火災。我誤解了什麼是readyState 2?我嘗試了1踢,並沒有在服務器響應之前觸發。
我看了一下xhr對象的上傳對象,它至少有一個「進度」事件,但我仍然沒有看到有關進度的任何事情。事實上,如果上一次進度爲97%,則在文件完成發送到服務器時不會在100%時啓動。因此,當服務器處理上載時,在readyState變爲4之前進度掛起在97%。
這使得用戶認爲上傳停頓,甚至認爲它實際上一直在上升。
嗯,我正在讀它是關於狀態更加不明朗。如果我在.send熄滅的時候做了一些事情,是不是像第一個字節而不是100%的字節那樣? – 2012-07-26 22:47:39
我想將您的答案標記爲唯一,但您能否回答我關於.send的問題? – 2012-08-01 21:17:34
對不起,錯過了您的評論。如果你以我的答案爲例,你會在第一個字節被髮送的同時發射。就w3規範而言,當請求被髮送時,沒有辦法阻止。狀態0和1打開告訴你什麼時候開始。如果你在哪裏使用'xhr.open()',你會得到一個等於1的'xhr.readyState',但是不會發送請求。我會更新我的答案來展示一個例子。 – travis 2012-08-02 18:29:17