Обработка ошибок JQuery AJAX (коды состояния HTTP)

У нас есть API, который использует правильные коды состояния HTTP для ошибок и отвечает на JSON-кодированные ответы и соответствующий заголовок Content-Type. Моя ситуация заключается в том, что jQuery.ajax() вызывает обратный вызов error, когда он встречает статус ошибки HTTP, а не обратный вызов 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()? Это не очень СУХОЙ, и я уверен, что я просто что-то пропустил в хороших методах обработки ошибок в этих случаях.

Ответ 1

Отъезд 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
});