En utilisant jQuery, comment puis-je annuler/abandonner une requête Ajax dont je n'ai pas encore reçu la réponse ?
La plupart des méthodes Ajax de jQuery renvoient un objet XMLHttpRequest (ou l'équivalent), vous pouvez donc simplement utiliser abort()
.
Voir la documentation :
var xhr = $.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
//kill the request
xhr.abort()
MISE À JOUR: À partir de jQuery 1.5, l'objet renvoyé est une enveloppe pour l'objet XMLHttpRequest natif appelé jqXHR. Cet objet semble exposer toutes les propriétés et méthodes natives, de sorte que l'exemple ci-dessus fonctionne toujours. Voir [L'objet jqXHR][5] (documentation de l'API jQuery).
MISE À JOUR 2:
A partir de jQuery 3, la méthode ajax renvoie maintenant une promesse avec des méthodes supplémentaires (comme abort), donc le code ci-dessus fonctionne toujours, bien que l'objet renvoyé ne soit plus un xhr
. Voir le [blog 3.0 ici][6].
MISE À JOUR 3 : xhr.abort()
fonctionne toujours sur jQuery 3.x. Ne supposez pas que la mise à jour 2 est correcte. Plus d'infos sur le dépôt Github de jQuery.
[1] : http://msdn.microsoft.com/en-us/library/ms535920%28VS.85%29.aspx [2] : http://en.wikipedia.org/wiki/Microsoft_Developer_Network [3] : https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/abort [4] : http://en.wikipedia.org/wiki/Mozilla_Developer_Network [5] : http://api.jquery.com/jQuery.ajax/#jqXHR [6] : http://blog.jquery.com/2016/01/14/jquery-3-0-beta-released/
Vous ne pouvez pas rappeler la requête mais vous pouvez définir une valeur de délai d'attente après laquelle la réponse sera ignorée. Voir cette [page][1] pour les options AJAX de jquery. Je pense que votre callback d'erreur sera appelé si le délai d'attente est dépassé. Il existe déjà un délai d'attente par défaut pour chaque requête AJAX.
Vous pouvez également utiliser la méthode [abort()][2] sur l'objet de la requête mais, bien que cela entraîne l'arrêt de l'écoute de l'événement par le client, cela may n'empêchera probablement pas le serveur de le traiter.
[1] : http://docs.jquery.com/Ajax/jQuery.ajax#options [2] : https://developer.mozilla.org/en/DOM/XMLHttpRequest#abort%28%29
Il s'agit d'une demande asynchrone, ce qui signifie qu'une fois envoyée, elle n'existe plus.
Dans le cas où votre serveur commence une opération très coûteuse à cause de la requête AJAX, le mieux que vous puissiez faire est d'ouvrir votre serveur pour écouter les demandes d'annulation, et d'envoyer une requête AJAX séparée notifiant au serveur d'arrêter ce qu'il est en train de faire.
Sinon, ignorez simplement la réponse AJAX.