Quelqu'un peut-il m'aider ?
Je ne suis pas capable de comprendre la différence entre success
y .done()
de $.ajax
.
Si possible, veuillez donner des exemples.
Quelqu'un peut-il m'aider ?
Je ne suis pas capable de comprendre la différence entre success
y .done()
de $.ajax
.
Si possible, veuillez donner des exemples.
success
ne se déclenche que si l'appel AJAX est réussi, c'est-à-dire s'il renvoie finalement un statut HTTP 200. error
se déclenche s'il échoue et complete
lorsque la demande est terminée, quel que soit le succès.
Dans la version 1.8 de jQuery, sur la page jqXHR
(retourné par $.ajax
) success
a été remplacé par done
, error
con fail
y complete
con always
.
Cependant, vous devriez toujours être en mesure d'initialiser la requête AJAX avec l'ancienne syntaxe. Elles font donc 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"); });
Cette modification a pour but d'assurer la compatibilité avec la version 1.5 de jQuery. objet différé . Reporté (et maintenant Promise
(qui bénéficie d'une prise en charge native complète dans les navigateurs 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'une pyramide imbriquée de callbacks que l'on obtient avec la fonction success
.
Toutefois, veuillez noter que done
est désormais déprécié au profit de l'option Promise
qui utilise la syntaxe 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
y await
extend promet une syntaxe (et une gestion des erreurs) améliorée :
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);
}
Création de la fonction avant de faire la demande, et définition de la fonction après avoir fait la demande. Il semble que les deux soient identiques ... pouvez-vous me montrer d'autres différences ???
@suhail - il n'y en a pas vraiment ; dans jQuery 1.6 il y avait success
dans jQuery 1.8, qui a été remplacé par done
. Ils fonctionnent de la même manière, mais done
est plus cohérent avec le reste de jQuery.
@Keith donc aujourd'hui, utiliser .done est la même chose qu'utiliser success ? ou il y a quelque chose d'encore plus récent ?
En bref, découpler la fonction de rappel du succès de la fonction ajax afin de pouvoir ajouter ultérieurement vos propres gestionnaires sans modifier le code original (modèle d'observateur).
Veuillez trouver des informations plus détaillées ici : https://stackoverflow.com/a/14754681/1049184
En dessous, l'exemple montre l'équivalence entre done => succès, fail => erreur et always => complet.
Cette réponse ne répond pas à la question. Il y a une différence entre success:
utilisé comme paramètre et .success()
comme une méthode sur un jqXHR
. Ce dernier est en train d'être déprécié, mais le premier est ce que le PO demandait.
Success/error/complete sont dépréciés et basés sur les changements d'état AJAX ; done/fail/always sont basés sur les changements d'état jQuery Deferred. Voir api.jquery.com/category/deferred-object .
.success()
n'est appelé que si votre serveur Web répond avec un en-tête HTTP 200 OK - en fait, 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
Il convient de noter que .success() n'est PAS appelé lorsque du JSON malformé est renvoyé avec un code d'état 200/OK. Plus précisément, j'ai rencontré un problème avec le code backend du serveur web qui générait des valeurs NaN et les sérialisait en tant que javascript NaN (c'est-à-dire en tant que symbole, et non en tant que chaîne 'NaN'), ce qui n'est en fait pas du JSON valide -- donc l'analyse de la réponse en tant que JSON échoue et .fail() est exécuté, mais le statut de la réponse est 200. Mais il est toujours vrai que le succès est appelé UNIQUEMENT avec un code d'état OK ; je voulais juste souligner que ce n'est pas parce que c'est OK que c'est un succès ;)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Où avez-vous lu que la méthode done() de $.ajax() existait ? Je pense que la méthode done est liée à l'objet $.Deferred. Peut-être parlez-vous plutôt de .complete() ?
1 votes
Sur api.jquery.com/jQuery.ajax page
2 votes
Ok, c'est jQuery 1.8 :) Puisque $.ajax retourne une promesse depuis jQuery 1.5, il s'agit d'une simple substitution pour une question de cohérence (en utilisant l'interface de deferred) : done() prend la place de success(), fail() pour error() et always() pour complete()
2 votes
Le véritable changement est que vous pouvez attacher plusieurs callbacks de manière programmatique. Consultez la page de documentation de $.Deferred.
0 votes
Veuillez consulter ce document pour une meilleure explication : stackoverflow.com/a/14754681/781695
0 votes
@FabrizioCalderan dans mon cas, les deux.
success
est déclenché avantdone
Une idée de ce qui ne va pas ? stackoverflow.com/questions/26072445/1 votes
Duplicata possible de jQuery.ajax handling continue responses : "success :" vs ".done" ?
0 votes
Vous devriez mettre à jour la réponse acceptée : @Keith est correct et a beaucoup plus de votes positifs en conséquence.