0

すべてのエラーを 1 か所で処理したいと考えています。
すべてのリクエストを処理する 1 つの場所で、エラー ハンドラを XMLHttpRequest オブジェクト (またはそのようなもの) にアタッチすることは可能ですか?

ありがとう

4

1 に答える 1

3

XMLHttpRequest オブジェクトが 1 つだけの場合は、readystatechangeイベントをリッスンして検出し、操作が完了すると、statusプロパティを読み取ってエラーを検出します。

ここで、すべてのオブジェクトでこれを行いたい場合は、発生するすべてのreadystatechangeイベントをリッスンする必要があります。つまり、XMLHttpRequest が作成または初期化された場合は、それぞれのイベントに登録します。これは、XMLHttpRequest プロトタイプの open メソッドをオーバーライドすることで実行できます。これにより、イベント リスナーが登録され、古い open メソッドが呼び出されます。

そのために次のコードを使用しました(Firefoxで):

 (function(open) {
   XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
     this.addEventListener("readystatechange", function() {
       if (this.readyState==4 && (this.status != 200 && this.status != 301 && this.status != 302))  {
         alert("Error: "+this.statusText)
       }
     }, false);
     open.call(this, method, url, async, user, pass);
   };
 })(XMLHttpRequest.prototype.open);

(これは、 XMLHttpRequest オブジェクトごとに 1 回だけ呼び出されるか、イベントが複数回登録されていることを前提としていopenます。安全を確保したい場合は、おそらく を追加して open-function をリセットできますthis.open = open;)

于 2012-07-26T21:43:50.587 に答える