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 avec un comportement appelé lorsque l'appel AJAX est terminé?
Merci
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
}
});
}
}
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;
}
}
});
Aucun des solutions données ont fonctionné pour moi avec Drupal 7.24, jQuery 1.11 et Vues 7.x-3.8 .
Ce que user1193694 a suggéré n'était pas mauvais, mais l'objet de paramètres que j'ai reçu n'avait pas extraData paramètre.
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 la machine de votre vue.