Que se va a utilizar en un momento dado.

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

Para ajaxStop() dice:

Descripción: el Registro de una llamada al controlador cuando todas las peticiones Ajax se han completado. Este es un Evento Ajax.

Y para el ajaxComplete() dice:

Descripción: el Registro de una llamada al controlador cuando peticiones Ajax completa. Este es un Evento Ajax.

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

Todos ajaxComplete controladores se invoca, independientemente de lo que la petición Ajax se completó. Si debemos diferenciar entre las peticiones, podemos utilizar los parámetros que se pasan al controlador. Cada vez que un ajaxComplete controlador se ejecuta, 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 lo que cada uno es y el uso adecuado para cada uno. En una aplicación que he construido recientemente he invocado ajaxStop() al fuego cuando mis llamadas ajax se terminó. Me gustaría, a continuación, analizar los datos devueltos por el resultado del lado del servidor de la operación. Ahora estoy empezando a preguntarme si debería haber usado ajaxComplete() en su lugar, o una combinación de ambos para diversas situaciones.

Pensamientos son apreciados.

  • Yo no podía entender por qué estaba recibiendo el error ajaxComplete is not a function. Asegúrese de no utilizar el ‘slim’ la versión de jQuery: stackoverflow.com/a/35424465/470749
InformationsquelleAutor Chris | 2010-12-11

3 Comentarios

  1. 58

    Bien, la versión corta es que sirven a propósitos diferentes, así que la respuesta sería «una combinación de ambos para diversas situaciones» opción. Las reglas básicas son:

    • .ajaxComplete() – funciona para cada solicitud que completa, utilice esta opción cuando desee hacer algo con cada solicitud/resultado. Tenga en cuenta que esto no reemplaza a la success controlador, ya que los datos analizados no es uno de los argumentos (y funciona incluso cuando hay un error) – es posible que desee .ajaxSuccess() en algunos por solicitud de las situaciones en su lugar.
    • .ajaxStop() – se ejecuta cuando cada lote de solicitudes completa, por lo general, usted tendría que utilizar esto en combinación con .ajaxStart() para cosas como mostrar/ocultar un «Cargando…» indicador de algún tipo – o para hacer algo más una vez que un lote de peticiones AJAX acabados, como un maestro de último paso.

    Si usted está usando esto para analizar sus datos, es probable que exista una mejor manera, en este caso $.ajaxSetup(), donde puede especificar un success controlador que recibe el ya analizado los datos (por ejemplo, respuestas JSON serán objetos), como este:

    $.ajaxSetup({
      success: function(data) { 
        //do something with data, for JSON it's already an object, etc.
      }
    });
    • Me sale el ajax éxito de la llamada. Cuando debo usar ajaxStop frente a completar.
    • se desencadena cuando un lote de solicitudes completa, es decir, si el fuego 5, no importa en qué orden vuelven, que se desencadena cuando el 5to completa, por lo que no hay peticiones AJAX espera de los resultados en ese punto, ya está hecho. Esto significa que no tiene ninguna información acerca de la petición específica que completó, porque no para una petición, era para todos ellos. ajaxComplete incendios para el cada de la solicitud, con el XMLHttpRequest objeto de cada uno…para que tenga algo de info acerca de la solicitud para lidiar con…todo depende de lo que en realidad estamos haciendo lo que es apropiado.
    • Gracias, que tenga sentido.
    • Ahhh, me tomó un par de lecturas & los comentarios para mí para conseguir que. El punto es que .ajaxStop() ejecuta cuando no hay ningún pendiente peticiones ajax a la izquierda, mientras que .ajaxComplete() se ejecuta después de cada completado la petición ajax. Gracias!
  2. 8

    ajaxComplete es llamado cada vez que una petición ajax acabados, ya sea con éxito o con un error.

    ajaxStop se llama cuando todos peticiones ajax completa. Así, a diferencia de ajaxComplete, no será llamado si todavía hay una petición en curso.

    Usted debe usar la primera si la operación que se desea realizar se debe hacer en cada petición ajax.

  3. 3

    En general, usted desea utilizar ajaxComplete. Esto es debido a que ajaxStop sólo se activa cuando no hay más peticiones ajax todavía a la espera de volver. Esto puede no parecer diferente cuando usted está enviando una petición ajax a un tiempo, pero imagino que la red pasó a ser más lenta después de enviar la solicitud de Una y, cuando la solicitud B se envía 5 segundos más tarde regresa antes de solicitar Una… entonces ajaxStop sólo se activará una vez después de solicitar Una rentabilidad a la vez que ajaxComplete se dispara dos veces.

    La situación en la que tendría que utilizar ajaxStop es cuando usted enviar múltiples peticiones ajax en un ir… por ejemplo, para presentar una serie de 3 formas… y quiere ser notificado cuando todos 3 complete con éxito. Por supuesto, usted puede conseguir la misma funcionalidad con un contador dentro de ajaxComplete

    Sin embargo, a partir de los sonidos de tu pregunta… te gustaría analizar los datos de cada respuesta de ajax… normalmente esto se lleva a cabo en el ajax éxito de devolución de llamada, por ejemplo,

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

Dejar respuesta

Please enter your comment!
Please enter your name here