Pregunta

Tengo un informe en nuestro sistema interno que puede devolver datos desde 1 día hasta años completos. Debido a esto, el informe puede tardar 0,5 segundos o más de 45 segundos en generar todo.

El informe le permite modificar una serie de filtros, todos los cuales, cuando se modifican, activan una solicitud ajax de manera muy simple:

var ax = $.ajax({
    type: "GET",
    url: "/blah",
    data: values,
    success: function(data) { .. }
});

Ahora, el problema surge cuando nuestro maravilloso usuario declara " ¡Oh, espera! Quiero que esto sea de febrero, no de enero! & Quot ;. ¡Pero, una solicitud ya está ocurriendo ya que enero es una gran cantidad de datos! Entonces, el usuario cambia la opción de fecha a febrero y puedo ver la consola de Javascript enviando una segunda solicitud. Ahora tenemos dos yendo y es una carrera>

  

/ report /? start_date = January (Sigue cargando ...)

     

/ report /? start_date = Febrero (¡Hola, ahora estoy aquí también!)

Entonces, generalmente el más pequeño se cargará antes, pero luego el otro se carga y sobrescribe el que ya tenían ... hmm :)

He intentado usar ax.abort () colocado después de la declaración de la variable ax como se menciona here pero no parece estar funcionando.

Así que ahora me pregunto, ¿qué me estoy perdiendo? Solo quiero eliminar la solicitud actual (del lado del cliente, sé que no puedo hacer nada al respecto en el lado del servidor) tan pronto como el usuario cambia algunas opciones, por lo que no tengo 2 o más solicitudes al mismo tiempo. . Configurar async: false no es una opción, ya que simplemente bloquea al usuario.

Gracias de antemano por tu ayuda.

¿Fue útil?

Solución

Puede consultar el ajaxmanager plugin

Otros consejos

Creo que intentar abortar la solicitud anterior no es una buena solución. Tal vez debería usar una solución simple: para cada contador de aumento de solicitudes ajax en javascript, y pasarlo a la devolución de llamada ajax. Cuando se produce la devolución de llamada, compruebe si el contador de la respuesta es el mismo que el valor del contador actual. Si no es así, ignore la respuesta: se disparó por un evento de clic desactualizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top