J'ai un problème lors de la soumission d'un formulaire, toutes les demandes ajax actives échouent et cela déclenche un événement d'erreur.
Comment arrêter toutes les requêtes ajax actives dans jQuery sans déclencher d'événement d'erreur?
Chaque fois que vous créez une requête ajax, vous pouvez utiliser une variable pour la stocker:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Ensuite, vous pouvez abandonner la demande:
request.abort();
Vous pouvez utiliser un tableau pour garder une trace de toutes les demandes ajax en attente et les annuler si nécessaire.
L'extrait de code suivant vous permet de conserver une liste ( pool ) de demandes et de les annuler toutes si nécessaire. Il est préférable de le placer dans
<HEAD>
votre html, avant tout autre appel AJAX.la source
Object doesn't support property or method 'indexOf'
? Je soupçonne que ce pourrait être stackoverflow.com/a/2608601/181971 ou peut-être simplement basculer vers stackoverflow.com/a/2608618/181971 ?Utiliser ajaxSetup n'est pas correct , comme indiqué sur sa page doc. Il ne définit que les valeurs par défaut, et si certaines demandes les remplacent, il y aura un gâchis.
Je suis bien en retard à la fête, mais juste pour référence future si quelqu'un cherche une solution au même problème, voici mon coup, inspiré et largement identique aux réponses précédentes, mais plus complet
la source
Voici ce que j'utilise actuellement pour y parvenir.
Remarque: _.chaque des underscore.js est présent, mais évidemment pas nécessaire. Je suis juste paresseux et je ne veux pas le changer en $ .each (). 8P
la source
aboutAll
devrait supprimer les éléments du tableau. De plus, lorsqu'une demande est terminée, elle doit se retirer de la liste.Donnez à chaque requête xhr un identifiant unique et stockez la référence d'objet dans un objet avant de l'envoyer. Supprimez la référence une fois la demande xhr terminée.
Pour annuler toute demande à tout moment:
Renvoie les identifiants uniques de la demande annulée. Uniquement à des fins de test.
Fonction de travail:
Renvoie un objet avec une fonction unique qui peut être utilisé pour ajouter plus de fonctionnalités si nécessaire.
la source
Je l'ai trouvé trop facile pour plusieurs demandes.
étape1: définir une variable en haut de page:
step2: définir beforeSend dans toutes les requêtes ajax:
étape 3: utilisez-la partout où vous en avez besoin:
la source
J'ai étendu la réponse mkmurray et SpYk3HH ci-dessus afin que xhrPool.abortAll puisse abandonner toutes les demandes en attente d'une URL donnée :
L'utilisation est la même, sauf que abortAll peut désormais éventuellement accepter une URL comme paramètre et n'annulera que les appels en attente vers cette URL
la source
J'ai eu quelques problèmes avec le code d'Andy, mais cela m'a donné de bonnes idées. Le premier problème était que nous devrions supprimer tous les objets jqXHR qui se terminent avec succès. J'ai également dû modifier la fonction abortAll. Voici mon code de travail final:
Je n'aimais pas la façon de faire les choses ajaxComplete (). Peu importe comment j'ai essayé de configurer .ajaxSetup, cela n'a pas fonctionné.
la source
J'ai mis à jour le code pour le faire fonctionner pour moi
la source
Jeter mon chapeau. Offres
abort
etremove
méthodes contre lexhrPool
tableau, et n'est pas sujet à des problèmes avec desajaxSetup
remplacements.la source
Faites un pool de toutes les demandes ajax et annulez-les .....
la source
Mieux vaut utiliser du code indépendant .....
la source
Tout aussi important: dites que vous voulez vous déconnecter et que vous générez de nouvelles requêtes avec des minuteries: parce que les données de session sont renouvelées à chaque nouveau bootstrap (peut-être pouvez-vous dire que je parle de Drupal, mais cela pourrait être n'importe quel site qui utilise des sessions). J'ai dû parcourir tous mes scripts avec une recherche et un remplacement, car j'avais une tonne de choses en cours d'exécution dans différents cas: variables globales en haut:
la source
chaque fois que vous voulez abandonner toute la demande ajax, il vous suffit d'appeler cette ligne
la source
Il existe une solution factice, je l'utilise pour abandonner toutes les demandes ajax. Cette solution consiste à recharger toute la page. Cette solution est bonne si vous n'aimez pas attribuer un ID à chaque demande ajax et si vous faites des demandes ajax à l'intérieur de for-loop. Cela garantira que toutes les demandes ajax sont supprimées.
la source
Voici comment connecter cela à n'importe quel clic (utile si votre page passe de nombreux appels AJAX et que vous essayez de vous éloigner).
la source