success example error jquery ajax

example - jquery:: ajaxStop() versus jquery:: ajaxComplete()



jquery ajax json (3)

Bueno, la versión corta es que sirven para diferentes propósitos, por lo que la respuesta sería la opción "una combinación de ambos para varias situaciones". Las reglas básicas son:

  • .ajaxComplete() : se ejecuta para cada solicitud que se completa, .ajaxComplete() cuando quieras hacer algo con cada solicitud / resultado. Tenga en cuenta que esto no reemplaza al controlador de success , ya que los datos analizados no son uno de los argumentos (y se ejecuta incluso cuando hay un error); en su lugar, puede desear .ajaxSuccess() en algunas situaciones por solicitud.
  • .ajaxStop() : se ejecuta cuando se completa cada lote de solicitudes ; por lo general, se usa esto en combinación con .ajaxStart() para mostrar u ocultar un indicador de "Carga ..." de algún tipo, o para hacer otra cosa una vez un lote de solicitudes AJAX finaliza, como un último paso maestro.

Si está utilizando esto para analizar sus datos, probablemente exista una forma mejor, en este caso $.ajaxSetup() , donde puede especificar un controlador de success que obtenga los datos ya analizados (por ejemplo, las respuestas JSON serán objetos), como esta:

$.ajaxSetup({ success: function(data) { //do something with data, for JSON it''s already an object, etc. } });

Cuál debe ser utilizado en qué momento.

En la documentación en http://api.jquery.com/ :

Para ajaxStop () dice:

Descripción: Registre un controlador para que se llame cuando se hayan completado todas las solicitudes de Ajax. Este es un Evento Ajax.

Y para el ajaxComplete () dice:

Descripción: Registre un controlador para llamar cuando las solicitudes Ajax se completen. Este es un Evento Ajax.

Por lo que puedo ver, ajaxComplete () es más flexible debido a:

Se invocan todos los controladores ajaxComplete, independientemente de qué solicitud Ajax se haya completado. Si debemos diferenciar entre las solicitudes, podemos usar los parámetros pasados ​​al controlador. Cada vez que se ejecuta un controlador ajaxComplete, se pasa el objeto de evento, el objeto XMLHttpRequest y el objeto de configuración que se utilizó en la creación de la solicitud.

¿Puede alguien explicar para qué sirve cada uno y el uso apropiado para cada uno? En una aplicación que construí recientemente, confié en ajaxStop () para disparar cuando terminaron mis llamadas ajax. Entonces analizaría los datos devueltos para el resultado de la operación del lado del servidor. Ahora estoy empezando a preguntarme si debería haber usado ajaxComplete () en su lugar o una combinación de ambos para diversas situaciones.

Los pensamientos son apreciados.


En general, quieres usar ajaxComplete . Esto se debe a que ajaxStop solo se activará cuando ya no haya más solicitudes ajax esperando a volver. Esto puede no parecer diferente cuando está enviando una solicitud ajax a la vez, pero imagine que la red se ralentizó después de enviar la solicitud A y, cuando la solicitud B se envía 5 segundos después, regresa antes que la solicitud A ... ajaxStop continuación, ajaxStop solo se activará una vez que la solicitud A regrese, mientras que ajaxComplete se ajaxComplete ambas ocasiones.

La situación en la que usaría ajaxStop es cuando envía múltiples solicitudes de ajax de una vez ... por ejemplo, para enviar una serie de 3 formularios ... y desea recibir una notificación cuando los 3 se completen correctamente. Por supuesto, puede lograr la misma funcionalidad con un contador dentro de ajaxComplete

Sin embargo, a partir de los sonidos de su pregunta ... le gustaría analizar los datos de cada respuesta ajax ... normalmente esto se haría en la devolución de llamada de éxito de Ajax, por ejemplo

$.ajax({ url: "blah", data: "blah", success: function (data) { /* Code in here */ } });


ajaxComplete se ajaxComplete cada vez que finaliza una solicitud de Ajax, ya sea con éxito o con un error.

se llama ajaxStop cuando se completan todas las solicitudes ajax. Entonces, a diferencia de ajaxComplete , no se llamará si todavía hay una solicitud en progreso.

Debe usar el primero si la operación que desea realizar debe realizarse para cada solicitud de Ajax.