2

私は$(document).ajaxError()ajax 呼び出しでサーバー側のエラーと通信エラーをキャッチするために使用しています。

ajax javascript ハンドラーでクライアント側のエラーをグローバルにキャッチする (ログの目的で) クリーンな方法は何ですか? オーバーライドし$.ajax()ますか?

例えば

$.get("http://foo.com/", function(){
  alert(undefined.something); // I want this exception to be logged
});

すべての ajax ハンドラーに対して個別の try...catch...log を書き込むことは避けたいです。

4

1 に答える 1

1

私の頭に浮かぶ唯一のことは、そのようなerrorイベントをバインドすることです:

​$(window).error(function(e){
    if ($.active > 0) {
        // your error handling
    }
});

$.activeはアクティブな Ajax リクエストの数を示しているため、リクエストが成功を返してもundefined.something成功ハンドラーに問題がある場合でもエラーが発生します。

デモ: http://jsfiddle.net/KWX4k/

更新: DEMO からの私のテスト ケース

I.成功ハンドラーに問題がある有効なAjaxリクエスト:

$.get("/", function() {
    undefined.something
});

結果 発火!

Ⅱ.成功ハンドラーで問題なく無効な Ajax リクエスト:

$.get("http://www.google.com/", function() {
    // undefined.something
});

結果:発火しません。

III. コード内の単純な未定義エラー:

undefined.something

結果:発火しません。

だから、それは働いているようです:)

ただし、この方法には小さな欠点があります。Ajax は通常非同期で使用されるため、Ajax ハンドラーとこの Ajax リクエストを呼び出すメソッド (つまり、Ajax を呼び出した直後に置かれる) に 2 つのエラーがある場合、イベントは 2 回発生します。ただし、Ajax リクエスト後のすべてのアクションは通常、Ajax 成功ハンドラーに転送されるため、このような状況は重要ではありません。

于 2012-05-03T10:14:05.277 に答える