2016-08-23 86 views
0

我想對所有Ajax請求操作,專門處理409S,但我的狀態碼總是 0即使FireFox的調試器會清楚地顯示了我409XMLHttpRequest的狀態代碼始終是0

JS代碼

(function(open) { 
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { 
    if(this.status === 409) 
     console.log("Conflict 409") 
    open.apply(this, arguments); 
    }; 
})(XMLHttpRequest.prototype.open); 

我可以非常容易地與我的服務器代碼生成409s。我看到FireFox和Chrome顯示409s。但this.status始終爲0,即使在400s。我究竟做錯了什麼?

+3

'status'僅設置send'被調用後'和'send'只能'open'之後被調用。因此,「開放」從不會看到零以外的狀態。 – Siguza

+0

我明白了。我是否可以立即進行發送操作,還是需要等待某個事件或就緒狀態?我已經嘗試立即運行發送和我的狀態仍然是0. – BarryBones41

+1

不,這種情況發生甚至更晚。如果你只是想在409發生時運行一些代碼,你可以通過'this.addEventListener('readystatechange',...)'添加一個事件監聽器,並在那裏檢查狀態409。如果你想阻止所有其他偵聽器在409上運行......這會變得更加複雜,並且需要你鉤住一堆方法和屬性。 – Siguza

回答

1

您正在檢查請求完成之前的狀態。您可以使用xhook庫攔截XHR響應。

實施例:

xhook.after((request, response) => { 
    if (response.status === 409) { 
    console.log("Conflict 409") 
    } 
})