web-dev-qa-db-fra.com

jQuery.post () .done () et success:

jQuery documentation sur jQuery.post( )

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.post( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
});

// Perform other work here ...

// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second finished" );
});

Quelle est la différence entre le paramètre success: et la méthode jqXHR.done( )? s'il n'y en a pas, quel est l'intérêt de la méthode jqXHR.done( )?

34
KaekeaSchmear

jQuery possédait UNIQUEMENT les fonctions de rappel pour success et error et complete

Ensuite, ils ont décidé de prendre en charge les promesses avec l'objet jqXHR. C'est à ce moment-là qu'ils ont ajouté .done(), .fail(), .always(), etc., dans l'esprit de l'API de promesse. Ces nouvelles méthodes ont pratiquement le même objectif que les rappels, mais sous une forme différente. Vous pouvez utiliser le style d'API le mieux adapté à votre style de codage.

Alors que les gens se familiarisent de plus en plus avec les promesses et que de plus en plus d'opérations asynchrones utilisent ce concept, je suppose que de plus en plus de personnes adopteront l'API de promesse au fil du temps, mais entre-temps, jQuery prend en charge les deux.

La méthode .success() a été déconseillée au profit des noms de méthode des objets de promesse communs.

Dans le document jQuery doc , vous pouvez voir le lien entre diverses méthodes de promesse et les types de rappel:

jqXHR.done (fonction (data, textStatus, jqXHR) {}); Une alternative Pour utiliser l’option callback success, la méthode .done () remplace la méthode obsolète jqXHR.success (). Reportez-vous à deferred.done () pour Détails d'implémentation.

jqXHR.fail (function (jqXHR, textStatus, errorThrown) {}); Un alternative à l'option de rappel d'erreur, la méthode .fail () remplace la méthode obsolète .error (). Reportez-vous à deferred.fail () pour Détails d'implémentation.

jqXHR.always (fonction (données | jqXHR, textStatus, jqXHR | errorThrown) {}); Une construction alternative à l'option de rappel complet, le La méthode .always () remplace la méthode obsolète .complete ().

En réponse à une requête réussie, les arguments de la fonction sont les identiques à ceux de .done (): data, textStatus et de l'objet jqXHR. Pour les demandes ayant échoué, les arguments sont les mêmes que ceux de .fail (): le Objet jqXHR, textStatus et errorThrown. Reportez-vous à deferred.always () pour les détails de la mise en œuvre.

jqXHR.then (fonction (data, textStatus, jqXHR) {}, fonction (jqXHR, textStatus, errorThrown) {}); Intègre les fonctionnalités du fichier Méthodes .done () et .fail (), autorisant (à partir de jQuery 1.8) le Promesse sous-jacente à manipuler. Reportez-vous à deferred.then () pour Détails d'implémentation.

Si vous souhaitez coder de manière plus conforme à la norme ES6 Promises, parmi ces quatre options, vous n’utiliseriez que .then().

48
jfriend00

La raison pour préférer Promises aux fonctions de rappel est d’avoir plusieurs rappels et d’éviter les problèmes tels que Callback Hell. 

Callback Hell (Pour plus de détails, référez-vous à http://callbackhell.com/ ): Le javascript asynchrone, ou javascript qui utilise des rappels, est difficile à comprendre intuitivement. Beaucoup de code finit par ressembler à ceci:

asyncCall(function(err, data1){
    if(err) return callback(err);       
    anotherAsyncCall(function(err2, data2){
        if(err2) return calllback(err2);
        oneMoreAsyncCall(function(err3, data3){
            if(err3) return callback(err3);
            // are we done yet?
        });
    });
});

Avec Promises, le code ci-dessus peut être réécrit comme suit:

asyncCall()
.then(function(data1){
    // do something...
    return anotherAsyncCall();
})
.then(function(data2){
    // do something...  
    return oneMoreAsyncCall();    
})
.then(function(data3){
    // the third and final async response
})
.fail(function(err) {
    // handle any error resulting from any of the above calls    
})
.done();
13
manish khandelwal

.done() et .success() sont des fonctions de rappel et fonctionnent essentiellement de la même manière.

Voici la documentation . La différence est que .success() est obsolète à partir de jQuery 1.8. Vous devriez utiliser .done() à la place.

Si vous ne voulez pas cliquer sur le lien:

Avis de dépréciation

Les rappels jqXHR.success(), jqXHR.error() et jqXHR.complete() Les méthodes introduites dans jQuery 1.5 sont obsolètes à partir de jQuery 1.8. À préparez votre code en vue de son éventuelle suppression, utilisez jqXHR.done(), jqXHR.fail() et jqXHR.always() à la place.

8
royhowie

De la doc:

jqXHR.done (fonction (data, textStatus, jqXHR) {});

Une construction alternative de l'option de rappel de réussite, le .done () Cette méthode remplace la méthode deprecated jqXHR.success (). Faire référence à deferred.done () pour les détails de l'implémentation.

Le point est juste une alternative pour l'option de rappel de succès, et jqXHR.success() est obsolète.

0
xdazz