33

エラーに対して適切な HTTP ステータス コードを使用し、JSON でエンコードされた応答と適切なContent-Typeヘッダーで応答する API があります。私の状況では、コールバックではなく、HTTP エラー ステータスが発生したときにコールバックがjQuery.ajax()トリガーされるため、わかりやすい JSON 応答がある場合でも、次のような方法に頼る必要があります。errorsuccess

$.ajax({
    // ...
    success: function(response) {
        if (response.success) {
            console.log('Success!');
            console.log(response.data);
        } else {
            console.log('Failure!');
            console.log(response.error);
        }
    },
    error: function(xhr, status, text) {
        var response = $.parseJSON(xhr.responseText);

        console.log('Failure!');

        if (response) {
            console.log(response.error);
        } else {
            // This would mean an invalid response from the server - maybe the site went down or whatever...
        }
    }
});

jQuery.ajax()各呼び出しで 2 つの場所で同じエラー処理を行うよりも優れたパラダイムはありますか? あまりDRYではありません。これらの場合の適切なエラー処理プラクティスのどこかで何かを見逃しているに違いありません。

4

1 に答える 1

45

チェックアウトjQuery.ajaxError()

さまざまな方法で処理できるグローバルな Ajax エラーをキャッチします。

if (jqXHR.status == 500) {
  // Server side error
} else if (jqXHR.status == 404) {
  // Not found
} else if {
    ...

または、グローバル エラー ハンドラー オブジェクトを自分で作成し、それを呼び出すかどうかを選択することもできます。

function handleAjaxError(jqXHR, textStatus, errorThrown) {
    // do something
}

$.ajax({
    ...
    success: function() { ... },
    error: handleAjaxError
});
于 2012-10-04T20:18:41.437 に答える