web-dev-qa-db-fra.com

Quelle est la différence entre la méthode success et .done () de $ .ajax

Quelqu'un peut-il m'aider?
Je ne suis pas en mesure de comprendre la différence entre success et .done() de $.ajax.

Si possible, donnez des exemples.

97
Poonam Bhatt

En bref, découplez la fonction de rappel de réussite de la fonction ajax afin que vous puissiez ultérieurement ajouter vos propres gestionnaires sans modifier le code d'origine (modèle d'observateur).

Veuillez trouver des informations plus détaillées à partir d'ici: https://stackoverflow.com/a/14754681/1049184

10
batbaatar

success ne se déclenche que si l'appel AJAX est réussi, c'est-à-dire qu'il renvoie finalement un statut HTTP 200. error se déclenche s'il échoue et complete quand la demande se termine, indépendamment du succès.

Dans jQuery 1.8 sur l’objet jqXHR (renvoyé par $.ajax) success a été remplacé par done, error avec fail et complete avec always.

Cependant, vous devriez toujours pouvoir initialiser la requête AJAX avec l'ancienne syntaxe. Ces opérations ont donc des effets similaires:

// set success action before making the request
$.ajax({
  url: '...',
  success: function(){
    alert('AJAX successful');
  }
});

// set success action just after starting the request
var jqxhr = $.ajax( "..." )
  .done(function() { alert("success"); });

Cette modification concerne la compatibilité avec objet différé de jQuery 1.5. Différé (et maintenant Promise, qui prend en charge le navigateur natif dans Chrome et FX) vous permet de chaîner des actions asynchrones:

$.ajax("parent").
    done(function(p) { return $.ajax("child/" + p.id); }).
    done(someOtherDeferredFunction).
    done(function(c) { alert("success: " + c.name); });

Cette chaîne de fonctions est plus facile à gérer qu'une pyramide imbriquée de rappels obtenue avec success.

Cependant, veuillez noter que done est maintenant déconseillé au profit de la syntaxe Promise qui utilise then à la place:

$.ajax("parent").
    then(function(p) { return $.ajax("child/" + p.id); }).
    then(someOtherDeferredFunction).
    then(function(c) { alert("success: " + c.name); }).
    catch(function(err) { alert("error: " + err.message); });

Cela vaut la peine d’être adopté car async et await extend promettent une syntaxe (et une gestion des erreurs) améliorées:

try {
    var p = await $.ajax("parent");
    var x = await $.ajax("child/" + p.id);
    var c = await someOtherDeferredFunction(x);
    alert("success: " + c.name);
}
catch(err) { 
    alert("error: " + err.message); 
}
102
Keith

.success() n'est appelé que si votre serveur Web répond avec un en-tête HTTP 200 OK, c'est-à-dire lorsque tout va bien.

Les callbacks attachés à done () seront déclenchés lorsque le différé sera résolu. Les callbacks attachés à fail () seront déclenchés lorsque le différé est rejeté.

promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback
6
Sameera Thilakasiri

success est le rappel qui est appelé lorsque la demande aboutit et fait partie de l'appel $.ajax. done fait en fait partie de l'objet jqXHR renvoyé par $.ajax() et remplace success dans jQuery 1.8.

0
devdigital