Tengo un problema, cuando envío un formulario, todas las solicitudes activas de ajax fallan, y eso desencadena un evento de error.
¿Cómo detener todas las solicitudes activas de ajax en jQuery sin un evento de error de trigerring?
Cada vez que crea una solicitud ajax, puede usar una variable para almacenarla:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Entonces puedes abortar la solicitud:
request.abort();
Puede utilizar una matriz que rastrea todas las solicitudes pendientes de ajax y abortarlas si es necesario.
El siguiente fragmento le permite mantener una lista ( grupo ) de solicitudes y cancelarlas todas si es necesario. Lo mejor es colocarlo en
<HEAD>
su html, antes de realizar cualquier otra llamada AJAX.fuente
Object doesn't support property or method 'indexOf'
? Sospecho que podría ser stackoverflow.com/a/2608601/181971 o tal vez simplemente cambiar a stackoverflow.com/a/2608618/181971 ?El uso de ajaxSetup no es correcto , como se señala en su página de documentación. Solo configura los valores predeterminados, y si algunas solicitudes los anulan, habrá un desastre.
Llego tarde a la fiesta, pero solo para referencia futura si alguien está buscando una solución al mismo problema, aquí está mi intento, inspirado y en gran parte idéntico a las respuestas anteriores, pero más completo
fuente
Esto es lo que estoy usando actualmente para lograr eso.
Nota: _.each of underscore.js está presente, pero obviamente no es necesario. Solo soy flojo y no quiero cambiarlo a $ .each (). 8P
fuente
aboutAll
debería eliminar los elementos de la matriz. Además, cuando finaliza una solicitud, debe eliminarse de la lista.Dele a cada solicitud xhr una identificación única y almacene la referencia del objeto en un objeto antes de enviarlo. Elimine la referencia después de que se complete una solicitud xhr.
Para cancelar toda solicitud en cualquier momento:
Devuelve los identificadores únicos de la solicitud cancelada. Solo con fines de prueba.
Función de trabajo:
Devuelve un objeto con una sola función que se puede usar para agregar más funcionalidad cuando sea necesario.
fuente
Lo encontré demasiado fácil para múltiples solicitudes.
Paso 1: define una variable en la parte superior de la página:
Paso 2: establecer antes de enviar en todas las solicitudes ajax:
Paso 3: úsalo donde lo necesites:
fuente
Extendí mkmurray y la respuesta SpYk3HH anterior para que xhrPool.abortAll pueda abortar todas las solicitudes pendientes de una URL dada :
El uso es el mismo, excepto que abortAll ahora puede aceptar opcionalmente una url como parámetro y cancelará solo las llamadas pendientes a esa url
fuente
Tuve algunos problemas con el código de Andy, pero me dio algunas ideas geniales. El primer problema fue que deberíamos extraer cualquier objeto jqXHR que se complete con éxito. También tuve que modificar la función abortAll. Aquí está mi código de trabajo final:
No me gustó la forma de hacer las cosas ajaxComplete (). No importa cómo intenté configurar .ajaxSetup, no funcionó.
fuente
He actualizado el código para que funcione para mí.
fuente
Lanzando mi sombrero. Ofertas
abort
yremove
métodos contra laxhrPool
matriz, y no es propenso a problemas con lasajaxSetup
anulaciones.fuente
Haga un grupo de todas las solicitudes de ajax y abortarlas .....
fuente
Mejor usar código independiente .....
fuente
Igual de importante: digamos que desea cerrar sesión y está generando nuevas solicitudes con temporizadores: porque los datos de la sesión se renuevan con cada arranque nuevo (tal vez pueda decir que estoy hablando de Drupal, pero este podría ser cualquier sitio que use sesiones). Tuve que revisar todos mis scripts con una búsqueda y reemplazo, porque tenía un montón de cosas ejecutándose en diferentes casos: variables globales en la parte superior:
fuente
cada vez que desee cancelar toda la solicitud de ajax, solo necesita llamar a esta línea
fuente
Hay una solución ficticia que la uso para cancelar todas las solicitudes de ajax. Esta solución es volver a cargar toda la página. Esta solución es buena si no le gusta asignar una ID a cada solicitud ajax, y si realiza solicitudes ajax dentro de for-loop. Esto asegurará que se eliminen todas las solicitudes de ajax.
fuente
Aquí le mostramos cómo conectar esto con cualquier clic (útil si su página está haciendo muchas llamadas AJAX y está tratando de navegar).
fuente