Ascolta l'evento completo AJAX da un comportamento


12

Ho un modulo con un pulsante AJAX. Quando lo faccio clic, aggiorna un sacco di cose come previsto, il che va bene.

Mi chiedevo se c'è un modo per creare un ascoltatore nel comportamento che viene chiamato quando la chiamata AJAX è completa?

Grazie

Risposte:


19

Si C'è :

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
    }
  });
 }
}

2
+1, ma per Drupal 7 sarebbeDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

Hai ragione: ho dimenticato una riga mentre si incolla!
Countzero,

2
non hai bisogno di questo $ () solo event.target.id non stai facendo riferimento a un oggetto
Nikola

Perché avvolgerlo nei comportamenti Drupal?
ram4,

1
Perché è considerata la migliore pratica e previene le collisioni di spazi dei nomi, tra le altre cose.
Countzero,

11

Per le versioni di jQuery 1.8+, sembra che ora sia necessario allegare la funzione .ajaxComplete al documento, non il modulo o la vista stessa (vedere http://api.jquery.com/ajaxcomplete/ )

Quanto segue ha funzionato per me su D7 con Jquery 1.10 e Views 7.x-3.8, dove "your_view_id" è il nome della macchina impostato nel pannello delle impostazioni "Altro" della vista. Ci sono molte altre informazioni su evento, xhr e impostazioni da escludere per determinare se il risultato ajax è per la vista desiderata, ma questo ha funzionato per la mia situazione:

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;

        }
    }

});

4

Nessuna delle soluzioni fornite ha funzionato per me con Drupal 7.24, jQuery 1.11 e Views 7.x-3.8 .

Ciò che user1193694 ha suggerito non era male, ma l'oggetto impostazioni che ho ricevuto non aveva il parametro extraData .

Quando ho analizzato l'oggetto settings ho visto che il file settings.data contiene " view_name = " e il nome del computer della tua vista, quindi è quello che sto filtrando per:

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!');

    }
});

Sostituisci " your_views_name " con il nome della macchina della tua vista.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.