web-dev-qa-db-fra.com

Appel à jquery ajax - .fail vs.: error

Lequel devrais-je utiliser? 

Y a-t-il une raison d'utiliser l'un plutôt que l'autre?

Est-ce un meilleur pour la gestion des erreurs?

$.ajax({
    url: url,
    data: { start: start, end: end }
}).done(function(data, textStatus, jqXHR) {
    $('#myElement').append(data);
}).fail(function() {
    // report error    
});

OR

$.ajax({
    url: url,
    data: { start: start, end: end },
    success: function(data, textStatus, jqXHR) {
        $('#myElement').append(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // report error
    }
});
67
PeteGO

Les deux options sont équivalentes.

Cependant, l'interface de style promesse (.fail() et .done()) vous permet de séparer le code créant la demande du code traitant la réponse.

Vous pouvez écrire une fonction qui envoie une demande AJAX et renvoie l'objet jqXHR, puis appelez cette fonction ailleurs et ajoutez un gestionnaire.

Lorsqu'elle est associée à la fonction .pipe(), l'interface de style promesse peut également aider à réduire l'imbrication lors de plusieurs appels AJAX:

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });
37
SLaks

Juste pour rafraîchir ça ...

L'approche des succès et des erreurs est obsolète à partir de jQuery 1.8.

jQuery Ajax

Avis de dépréciation: Les rappels jqXHR.success (), jqXHR.error () et jqXHR.complete () sont obsolètes à partir de jQuery 1.8. Pour préparer votre code en vue de son éventuelle suppression, utilisez plutôt jqXHR.done (), jqXHR.fail () et jqXHR.always ().

27
slohr

L'utilisation du style promesse de l'objet chaînable promise permet une structure plus propre et l'utilisation de toujours .

let data = {"key":"value"}

$.ajax({
    type: 'PUT',
    url: 'http://example.com/api',
    contentType: 'application/json',
    data: JSON.stringify(data), 
}).done(function () {
    console.log('SUCCESS');
}).fail(function (msg) {
    console.log('FAIL');
}).always(function (msg) {
    console.log('ALWAYS');
});
0
ow3n