web-dev-qa-db-ja.com

jQuery AJAXエラー処理(HTTPステータスコード)

エラーに適切なHTTPステータスコードを使用し、JSONエンコードされた応答と適切な_Content-Type_ヘッダーで応答するAPIがあります。私の状況は、errorコールバックではなく、HTTPエラーステータスが発生したときにjQuery.ajax()successコールバックをトリガーするため、わかりやすいJSON応答がある場合でも、このようなものに頼らなければなりません:

_$.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つのスポットで同じエラー処理を行うよりも良いパラダイムがありますか?それほど乾燥しているわけではありません。これらのケースでは、エラー処理の適切な実践に関するどこかを見逃しているに違いありません。

30
FtDRbwLXw6

チェックアウト 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
});
42
Terry