quelle est la différence entre le succès et l'.done () méthode 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, veuillez donner des exemples.

92
demandé sur whoan 2012-01-13 12:36:19

4 réponses

En bref, découpler la fonction de rappel de succès de la fonction ajax afin que plus tard vous puissiez ajouter vos propres gestionnaires sans modifier le code d'origine (modèle d'observateur).

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

8
répondu batbaatar 2017-05-23 12:34:19

success ne se déclenche que si L'appel AJAX est réussi, c'est-à-dire renvoie finalement un statut HTTP 200. error se déclenche si elle échoue et complete lorsque la requête se termine, quel que soit le succès.

Dans jQuery 1.8 sur la jqXHR objet (retourné par la $.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. Donc, ceux-ci font des choses 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"); });

Ce changement est pour compatibilité avec jQuery 1.5 objet différé . Différé (et maintenant Promise, qui a un support de navigateur natif complet dans Chrome et FX) vous permettent d'enchaî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 à maintenir qu'un imbriquée pyramide de rappels que vous obtenez avec success.

Cependant, veuillez noter que done est maintenant obsolète en faveur 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é parce que async et await extend promet une syntaxe améliorée (et une gestion des erreurs):

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); 
}
94
répondu Keith 2017-03-21 09:09:44

.success() n'est appelé que si votre serveur web répond avec un en - tête HTTP 200 OK-fondamentalement quand tout va bien.

Les rappels attachés à done () seront déclenchés lorsque le différé est résolu. Les rappels 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
5
répondu Sameera Thilakasiri 2012-01-13 08:45:16

success est le rappel appelé lorsque la requête est réussie et fait partie de l'appel $.ajax. done fait partie de l'objet jqXHR retourné par $.ajax(), et remplace success dans jQuery 1.8.

0
répondu devdigital 2012-01-13 08:44:00