tratamento de erros do jQuery AJAX (códigos de estado HTTP)

temos uma API que usa códigos de estado HTTP adequados para erros, e responde com respostas codificadas JSON e cabeçalho Content-Type apropriado. A minha situação é que jQuery.ajax() despoleta a chamada error quando encontra um estado de erro HTTP, e não a chamada success, por isso mesmo quando temos uma resposta JSON inteligível, temos de recorrer a algo como isto:

$.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...
        }
    }
});
Há um paradigma melhor do que fazer o mesmo tratamento de erros em dois pontos de cada chamada? Não é muito. Seco, e tenho a certeza que perdi algo em algum lugar sobre boas práticas de manipulação de erros nestes casos.

Author: FtDRbwLXw6, 2012-10-04

1 answers

Check out jQuery.ajaxError()

Ele apanha erros globais Ajax que você pode lidar de qualquer forma:

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

Em alternativa, você pode criar um objecto global de tratamento de erros e escolher se lhe deve chamar:

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

$.ajax({
    ...
    success: function() { ... },
    error: handleAjaxError
});
 41
Author: Terry, 2013-11-19 18:04:18