¿Hay alguna manera fácil de abandonar todas las solicitudes jQuery AJAX pendientes? Mi aplicación es capaz de generar una gran cantidad de solicitudes simultáneas, por lo que la raza se vuelve problemática. He puesto soluciones hackish (es decir, poner una bandera que se comprueba cuando se complete la solicitud), pero sería mucho más agradable obtener una función de detención global de todas las solicitudes pendientes.jQuery abandona todas las solicitudes pendientes de AJAX
Respuesta
Asignar cada petición Ajax como un elemento de una matriz:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
y matar:
$.each(requests, function(i, v) {
v.abort();
});
Yo diría almacenar todas las solicitudes de Ajax en una matriz. Cuando necesite matar, simplemente recorra todos los valores de la matriz y llame a abort(). Cuando se completa o cancela una solicitud, solo emerge de la matriz.
XMLHttpRequest tiene una función abort(). $ .ajax te permite tener en tus manos el objeto xhr. mantenga un registro de todas las xhr sobresalientes y vaya al xhr.abort()
para cualquiera que desee finalizar.
como los otros han dicho, utilice el método .abort(). Sin embargo, esto ÚNICAMENTE funciona en llamadas dentro del mismo dominio. una vez que ingresas a las llamadas entre sitios (con jsonp), el método .abort() se delega a nulo, por lo que en realidad no se activa/funciona.
digno de mención, ya que me causó el tiempo de depuración sin fin hace más de una pequeña luna :)
Jim
Información interesante, gracias por ese aviso . – Anders
anders - placer ... (aunque compruebe el estado más reciente en IE, ya que era principalmente el XMLHttpRequest en IE el que había sido un problema cuando intentaba convertirlo en un navegador independiente de mi caso). Me parece recordar que el aborto 'timeout' se establece en 0 en las llamadas al sitio x. de todos modos ... :) –
basado en la solución de Ken Redler, puse esto en mi inicialización:
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 ponga el fragmento con new_request_list
solo para evitar que la variable global se llene de objetos XHR completados.
Pondría la función de limpieza en '$ .ajaxSetup' o' xhr.onreadystatechange', pero me preocupa que esto interfiera con lo que jQuery haga por sí mismo. Esta solución parece funcionar bien. –
Encontré lo siguiente en jsfiddle. En su mayoría es el mismo que el anterior, excepto que eliminará cada solicitud una vez que se completen. Las soluciones anteriores solo siguen agregando a la matriz. Entonces, con el tiempo, podría ser enorme si estás haciendo muchas llamadas ajax. Llame al $.xhrPool.abortAll();
cuando desee cancelar todas las solicitudes pendientes.
// $.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. IE alternativa a window.stop() (cancelar todas las solicitudes pendientes)
- 2. Anular todas las solicitudes de jQuery AJAX globalmente
- 3. captar todas las solicitudes de ajax en jquery
- 4. Verificar solicitudes AJAX pendientes o solicitud HTTP GET/POST
- 5. Seguridad de las solicitudes AJAX
- 6. Cancelar las solicitudes AJAX en vuelo utilizando Jquery .ajax?
- 7. ¿es mejor o agrupar mis solicitudes de AJAX o enviar todas las solicitudes por separado?
- 8. Fuga de memoria con solicitudes AJAX + jQuery
- 9. ¿Cómo esperar las solicitudes jQuery Ajax para completar desde WatiN?
- 10. Firebug no muestra las solicitudes ajax
- 11. ¿Cómo llamar la alerta después de que se hayan realizado todas las solicitudes de Ajax?
- 12. jQuery 1.5.1 rompe todas las llamadas de ajax()
- 13. Ejecutar la función después de que todas las solicitudes ajax .load() hayan finalizado
- 14. Solicitudes AJAX de caché
- 15. jQuery aceleración y puesta en cola de solicitudes AJAX
- 16. Filtro de servlet para todas las solicitudes
- 17. Agregue un "gancho" a todas las solicitudes AJAX en una página
- 18. Intentando hacer un seguimiento del número de solicitudes pendientes de AJAX en firefox
- 19. jQuery Ajax espere hasta que se carguen todas las imágenes
- 20. jQuery y data-attributes para manejar todas las llamadas ajax?
- 21. Interceptar todas las solicitudes provenientes de una página web
- 22. ¿Cómo hacer todas las llamadas AJAX secuencialmente?
- 23. CORS in grails: ¿fallan todas las solicitudes?
- 24. Does Application_Start bloquea todas las solicitudes entrantes
- 25. URL relativas vs. absolutas en jQuery Solicitudes AJAX
- 26. ¿jQuery elimina las etiquetas de script devueltas por las solicitudes AJAX?
- 27. Al agregar un manifiesto HTML5 todas mis solicitudes jQuery (móvil) AJAX fallan con el estado 0
- 28. $ .ajax ignorando el parámetro de datos para las solicitudes DELETE
- 29. ¿Podría ser que Chrome cancele las solicitudes Ajax pendientes, una vez que el navegador se redirige a otra URL?
- 30. ¿Cómo rastrear las solicitudes de Ajax con Google Analytics?
Gracias. Esto parece haber hecho el truco. Elegí una implementación ligeramente diferente que detallo [aquí] (http://stackoverflow.com/questions/3313059/jquery-abandon-all-outstanding-ajax-requests/3313954#3313954) –