Existe-t-il un moyen facile d'abandonner toutes les requêtes jQuery AJAX en attente? Mon application est capable de tirer beaucoup de demandes simultanées, donc la course devient problématique. J'ai mis dans des solutions hackish (à savoir, mettre dans un drapeau qui est vérifié à la fin de la demande), mais il serait beaucoup plus agréable d'obtenir un arrêt global toutes les demandes en suspens fonctionnent.jQuery abandonne toutes les demandes AJAX en attente
Répondre
attribuer à chaque demande de paiement ajax comme un élément d'un tableau:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
Et pour tuer:
$.each(requests, function(i, v) {
v.abort();
});
Je dirais stocker toutes les demandes ajax dans un tableau. Quand vous avez besoin de tuer, faites simplement une boucle sur toutes les valeurs dans array et appelez abort(). Quand une demande est terminée ou annulée, il suffit de faire un saut dans le tableau.
XMLHttpRequest possède une fonction abort(). $ .ajax vous permet de mettre la main sur l'objet xhr. Gardez un enregistrement de tous les xhr en cours et allez xhr.abort()
pour tout ce que vous voulez terminer.
que les autres ont dit, utilisez la méthode .abort(). Cependant, cela fonctionne UNIQUEMENT sur les appels dans le même domaine. Une fois que vous entrez dans les appels inter-sites (avec jsonp), alors la méthode .abort() est déléguée à null, donc ne sera pas réellement en feu/travail.
intéressant de noter que cela m'a fait du temps de débogage sans fin beaucoup il y a une petite lune :)
jim
Cool information, merci pour ce heads up . – Anders
anders - plaisir ... (pour vérifier le dernier état sur IE car c'était principalement le XMLHttpRequest dans IE qui avait été un problème en essayant de rendre le navigateur agnostique dans mon cas). il me semble me souvenir que l'abandon 'timeout' est mis à 0 sur les appels x-site. de toute façon .. :) –
Basé sur la solution de Ken Redler, je mets dans mon initialisation:
window.requests = []
$.ajaxSetup({
beforeSend: function(xhr){
var new_request_list = [xhr]
$.each(window.requests, function(k,v){
if(v.readyState != 4) new_request_list.push(v)
})
window.requests = new_request_list
}
})
I mettre dans l'extrait avec new_request_list
juste pour éviter que la variable globale ne soit encombrée d'objets XHR complétés.
Je mettrais la fonction de nettoyage dans '$ .ajaxSetup' ou' xhr.onreadystatechange', mais je crains que cela interfère avec tout ce que jQuery fait par lui-même. Cette solution semble fonctionner correctement. –
J'ai trouvé ce qui suit au sujet de jsfiddle. Il est généralement le même que ci-dessus, sauf qu'il va supprimer chaque demande une fois qu'ils sont complets. Les solutions ci-dessus ne cessent de s'ajouter au tableau. Donc au fil du temps, il pourrait devenir énorme si vous faites beaucoup d'appels ajax. Vous appelez $.xhrPool.abortAll();
lorsque vous souhaitez abandonner toutes les demandes en attente.
// $.xhrPool and $.ajaxSetup are the solution
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$(this).each(function(idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool = [];
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
- 1. plusieurs demandes en attente
- 2. jquery ajax: fonction d'appel lorsque toutes les demandes sont terminées
- 3. demandes jquery ajax réutilisables
- 4. Abandonner globalement toutes les requêtes jQuery AJAX
- 5. Comment savoir si jQuery a une requête Ajax en attente?
- 6. jQuery Ajax demande toutes les 30 secondes
- 7. jquery ne soumettra pas les demandes post-ajax
- 8. Demandes AJAX séquentielles
- 9. Vote_fu et demandes Ajax
- 10. Ajax page, facebook FB.init() provoque toutes les demandes ajax se produire deux fois?
- 11. Supprimer toutes les demandes de ASINetWorkQueue
- 12. printemps 3 mvc intercepter toutes les demandes
- 13. AJAX: Attente d'une réponse?
- 14. En attente de contenu AJAX WebBrowser
- 15. en utilisant les données jquery pour traiter les demandes RESTfull
- 16. javascript: annule toutes sortes de demandes
- 17. Firebug ne montre pas les demandes ajax
- 18. JavaScript: Les variables globales après Ajax demandes
- 19. Recharger les données AJAX toutes les X minutes/secondes, jQuery
- 20. Vérifiez les requêtes AJAX en attente ou la requête HTTP GET/POST
- 21. Zend Framework - routes - toutes les demandes à un contrôleur à l'exception des demandes pour les contrôleurs existants
- 22. attente pour chaque jQuery
- 23. Mocking et Stubbing Ajax demandes
- 24. la vérification des autorisations sur Ajax Demandes
- 25. Comment suivre les demandes Ajax à l'aide de Google Analytics?
- 26. jquery en attente de $ .each pour finir
- 27. Ajax demandes de sous-domaine?
- 28. jquery touche attente
- 29. Google AppEngine case insensible à toutes les demandes d'url comment?
- 30. Acceptez toutes les demandes DNS dans cPanel (ou toute autre)
Merci. Cela semble avoir fait l'affaire. J'ai choisi une implémentation légèrement différente que je détaillerai [ici] (http://stackoverflow.com/questions/3313059/jquery-abandon-all-outstanding-ajax-requests/3313954#3313954) –