Arrêtez tous les actifs des requêtes ajax en jQuery
J'ai un problème, lors de la soumission d'un formulaire de tous les actifs ajax échec de la demande, et qui déclenche l'événement d'erreur.
Comment arrêter tous les actifs des requêtes ajax en jQuery sans déclenchement de l'événement d'erreur?
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous créez une requête ajax, vous pouvez utiliser une variable pour stocker:
Ensuite, vous pouvez annuler la demande:
Vous pouvez utiliser une matrice de garder une trace de tous dans l'attente de requêtes ajax et l'annuler si nécessaire.
L'extrait de code suivant vous permet de maintenir une liste (piscine) de la demande et abandonner tous les si nécessaire. Préférable de le placer dans le
<HEAD>
de votre code html, avant toutes les autres appels AJAX sont faites.Object doesn't support property or method 'indexOf'
? Je soupçonne qu'il pourrait être la stackoverflow.com/a/2608601/181971 ou peut-être tout simplement swap stackoverflow.com/a/2608618/181971 ?À l'aide de ajaxSetup n'est pas correct, comme il est indiqué sur sa page de doc. Il ne définit des valeurs par défaut, et si certaines demandes de les remplacer, ce sera la pagaille.
Je suis en retard à la fête, mais seulement pour l'avenir de référence si quelqu'un est à la recherche d'une solution au même problème, ici, c'est mon aller à elle, inspirée par et en grande partie identique à la réponse à la question précédente, mais plus complète
Voici ce que je suis en train d'utiliser pour le faire.
Note: _.chacun de underscore.js est présent, mais évidemment pas nécessaire. Je suis paresseux et je ne veux pas changer de $.chacun(). 8P
aboutAll
devrait supprimer les éléments de la matrice. En Plus, quand une demande est terminée, elle doit se supprimer de la liste.Donner à chaque demande xhr un id unique et stocker la référence de l'objet dans un objet avant de l'envoyer.
La suppression de la référence après une demande xhr complète.
Pour annuler toutes les demande tout le temps:
Retourne l'id unique de annulée demande. Des fins de test uniquement.
De travail de la fonction:
Retourne un objet avec une fonction unique qui peut être utilisé pour ajouter plus de fonctionnalités, si nécessaire.
Je l'ai trouvé trop facile pour de multiples demandes.
etape 1: définir une variable en haut de page:
etape 2: ensemble beforeSend dans toutes les requêtes ajax:
etape 3: l'utiliser où vous le nécessaire:
J'ai eu quelques problèmes avec andy code, mais il m'a donné quelques bonnes idées. Premier problème est que nous devons nous détacher de tout jqXHR objets qui terminent avec succès. J'ai également eu à modifier le abortAll fonction. Voici mon dernier travail code:
Je n'aimais pas le ajaxComplete() façon de faire les choses. Peu importe combien j'ai essayé de le configurer .ajaxSetup il n'a pas de travail.
J'ai étendu mkmurray et SpYk3HH réponse ci-dessus de sorte que xhrPool.abortAll pouvez annuler toutes les demandes en attente d'une url donnée :
L'utilisation est la même, sauf que abortAll est désormais capable d'accepter une url en tant que paramètre permet d'annuler seulement en attente des appels vers cette url
J'ai mis à jour le code pour faire cela fonctionne pour moi
Jeter mon chapeau. Offre
abort
etremove
méthodes contre laxhrPool
tableau, et n'est pas sujette à des problèmes avecajaxSetup
remplace.Faire une piscine de toutes les requêtes ajax et abandonner eux.....
Préférable d'utiliser le code indépendant de la.....
Tout aussi important: dites que vous voulez fermer la session et vous êtes la génération de nouvelles demandes avec des minuteries: parce que les données de session est renouvelé à chaque nouvelle bootstrap (peut-être que vous pouvez dire je suis en train de Drupal, mais ce pourrait être n'importe quel site qui utilise les sessions)... j'ai dû aller à travers tous mes scripts avec une recherche et remplacer, cause j'ai eu une tonne de choses en cours d'exécution dans différents cas de figure: les variables globales en haut:
chaque fois que vous souhaitez annuler toutes les requêtes ajax, vous avez juste besoin d'appeler cette ligne
Il est une fausse solution, je l'utiliser pour annuler toutes les requêtes ajax. Cette solution est de recharger la page entière. Cette solution est bonne si vous n'aimez pas à attribuer un ID à chaque requête ajax, et si vous faites des requêtes ajax à l'intérieur de la boucle. Ce sera assurez-vous que toutes les requêtes ajax sont tués.
Voici comment en profiter sur n'importe quel cliquez sur (utile si votre page est de placer de nombreux appels AJAX et que vous essayez de naviguer loin).