web-dev-qa-db-fra.com

jQuery AJAX Gestion des erreurs (codes d'état HTTP)

Nous avons une API qui utilise des codes d'état HTTP appropriés pour les erreurs et répond avec des réponses codées JSON et un en-tête Content-Type Approprié. Ma situation est que jQuery.ajax() déclenche le rappel error lorsqu'il rencontre un état d'erreur HTTP, et non le rappel success, donc même lorsque nous avons une réponse JSON intelligible, nous doivent recourir à quelque chose comme ça:

$.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...
        }
    }
});

Existe-t-il un meilleur paradigme que de faire une gestion des erreurs identique à deux endroits dans chaque appel à jQuery.ajax()? Ce n'est pas très SEC, et je suis sûr que je viens de manquer quelque chose quelque part sur les bonnes pratiques de gestion des erreurs dans ces cas.

30
FtDRbwLXw6

Découvrez jQuery.ajaxError()

Il capture les erreurs Ajax globales que vous pouvez gérer de différentes manières:

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

Vous pouvez également créer vous-même un objet de gestionnaire d'erreurs global et choisir de l'appeler:

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

$.ajax({
    ...
    success: function() { ... },
    error: handleAjaxError
});
42
Terry