Escuche el evento completo AJAX desde un comportamiento

12

Tengo un formulario que tiene un botón AJAX. Cuando hago clic en él, actualiza un montón de cosas como se esperaba, lo cual está bien.

Me preguntaba si hay una manera de crear un oyente en el comportamiento que se llama cuando se completa la llamada AJAX?

Gracias

Paul Sheldrake
fuente

Respuestas:

19

Sí hay :

Drupal.behaviors.YourBehaviour = {
attach: function(context, settings) {  
  $('#yourform').ajaxComplete(function(event, xhr, settings) {
    if ($(event.target.id) == 'the-id-of-your-item') {
      // Your code here
    }
  });
 }
}
Countzero
fuente
2
+1, pero para Drupal 7 seríaDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive
Tienes razón: olvidó una línea mientras pegaba!
Countzero
2
no necesitas este $ () solo event.target.id no estás haciendo referencia a un objeto
Nikola
¿Por qué envolverlo en comportamientos de Drupal?
ram4nd
1
Porque se considera la mejor práctica y evita las colisiones de espacios de nombres, entre otras cosas.
Countzero
11

Para las versiones de jQuery 1.8+, parece que ahora debe adjuntar la función .ajaxComplete al documento, no el formulario o la vista en sí (consulte http://api.jquery.com/ajaxcomplete/ )

Lo siguiente funcionó para mí en D7 con Jquery 1.10 y Vistas 7.x-3.8, donde "your_view_id" es el nombre de la máquina de la vista establecida en el panel de configuración "Otro" de la vista. Hay mucha otra información en el evento, xhr y configuraciones para desconectar para determinar si el resultado de ajax es para la vista que desea, pero esto funcionó para mi situación:

jQuery(document).ajaxComplete(function(event, xhr, settings) {
    if(typeof settings.extraData != 'undefined' && typeof settings.extraData.view_display_id != 'undefined') {

        switch(settings.extraData.view_display_id){

            case "your_view_id":

                console.log('your_view_id ajax results!');

                break;

            default:

                console.log('some other ajax result...');

                break;

        }
    }

});
usuario1193694
fuente
4

Ninguna de las soluciones dadas funcionó para mí con Drupal 7.24, jQuery 1.11 y Views 7.x-3.8 .

Lo que sugirió user1193694 no era malo, pero el objeto de configuración que recibí no tenía el parámetro extraData .

Al analizar el objeto de configuración, vi que la propiedad settings.data contiene ' view_name = ' y el nombre de la máquina de su vista, así que eso es lo que estoy filtrando:

jQuery(document).ajaxComplete(function(event, xhr, settings) {

    // see if it is from our view
    if (settings.data.indexOf( "view_name=your_views_name") != -1) {

            console.log('your_view_id ajax results!');

    }
});

Reemplace ' your_views_name ' con el nombre de la máquina de su vista.

Larzan
fuente