2016-08-23 15 views
0

である私は、すべてのAjaxリクエストで動作し、特に409sを処理しようとしていますが、私のステータスコードは、FireFoxのデバッガは明らかに私に409XMLHttpRequestのステータスコードは常に0

JSコードが表示されますにもかかわらず常に 0である

(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); 

私は非常に簡単に自分のサーバーコードで409を生成することができます。 FireFoxとChromeが409を表示しています。しかしthis.statusは400であっても常に0です。私は間違って何をしていますか?

+3

' status'のみが設定されています。したがって、 'open'はゼロ以外の状態を見ることはありません。 – Siguza

+0

私は参照してください。私はすぐにセンドで作業することができますか、またはいくつかのイベントや読書を待つ必要がありますか?私はsendですぐに動作しようとしましたが、ステータスはまだ0です。 – BarryBones41

+1

いいえ、それは後で起こります。 409が発生したときにコードを実行したいだけなら、 'this.addEventListener( 'readystatechange'、...)'でイベントリスナーを追加し、そこでステータス409をチェックすることができます。他のすべてのリスナーが409で動作しないようにしたい場合、それはもっと複雑になり、多くのメソッドやプロパティを必要とします。 – Siguza

答えて

1

リクエストが完了する前にステータスを確認しています。

xhookライブラリを使用すると、XHR応答を代行受信できます。

例:send`が呼び出され、そして `send`のみ` open`後に呼び出すことができる `後

xhook.after((request, response) => { 
    if (response.status === 409) { 
    console.log("Conflict 409") 
    } 
}) 
関連する問題