Écoutez l'événement complet AJAX à partir d'un comportement


12

J'ai un formulaire qui a un bouton AJAX. Lorsque je clique dessus, il met à jour un tas de choses comme prévu, ce qui est bien.

Je me demandais s'il y avait un moyen de créer un écouteur dans le comportement qui est appelé lorsque l'appel AJAX est terminé?

Merci

Réponses:


19

Oui il y a :

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, mais pour Drupal 7, ce seraitDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

Vous avez raison: vous avez oublié une ligne en collant!
Countzero

2
vous n'avez pas besoin de ce $ () juste event.target.id vous ne faites pas référence à un objet
Nikola

Pourquoi l'envelopper dans des comportements Drupal?
ram4nd

1
Parce que cela est considéré comme la meilleure pratique et empêche, entre autres, les collisions d'espaces de noms.
Countzero

11

Pour les versions de jQuery 1.8+, il semble que vous devez maintenant attacher la fonction .ajaxComplete au document, pas le formulaire ou la vue elle-même (voir http://api.jquery.com/ajaxcomplete/ )

Ce qui suit a fonctionné pour moi sur D7 avec Jquery 1.10 et Views 7.x-3.8, où "your_view_id" est le nom de la machine de la vue définie dans le panneau de paramètres "Autre" de la vue. Il y a beaucoup d'autres informations dans l'événement, la xhr et les paramètres à désactiver pour déterminer si le résultat ajax est pour la vue que vous souhaitez, mais cela a fonctionné pour ma situation:

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

Aucune des solutions données n'a fonctionné pour moi avec Drupal 7.24, jQuery 1.11 et Views 7.x-3.8 .

Ce que user1193694 a suggéré n'était pas mauvais, mais l'objet settings que j'ai reçu n'avait pas le paramètre extraData .

Lors de l'analyse de l'objet settings, j'ai vu que la propriété settings.data contient ' view_name = ' et le nom de la machine de votre vue, donc c'est pour cela que je filtre:

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

    }
});

Remplacez « your_views_name » par le nom de l' ordinateur de votre vue.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.