Drupal 7 : exécuter une fonction côté client après un appel ajax de FAPI

Lorsque l'on utilise l'API des formulaires de Drupal 7, les formulaires
posté en ajax sont gérés. Mais si on veut exécuter une fonction côté
client au succès de l'appel effectué, c'est moins évident.

On pourrait utiliser "$(document).ajaxComplete" mais cette fonction
est exécutée pour chaque appel ajax effectué. On serait contraint
d'effectuer un nombre important de tests pour savoir quelle action
effectuer.
Afin de savoir comment utiliser les fonctionnalités ajax de l'API des formulaires rendez vous sur la page de documentation. Nous allons nous intéresser seulement au 'callback'.

Callback du formulaire

Dans les exemples de modules pour la méthode 'replace' on peut voir un contenu de ce type :

return $form;

Afin de réaliser des appels côté client lors du retour du formulaire, il faut plutôt utiliser une fonction de ce type :

    //Passage de l'appel a la fonction avec en paramètre un item du form_state
    $commands[] = ajax_command_invoke(NULL, "successCallback", array($form_state['item']) );
    //Ajout du form
    $html = drupal_render($form);
    $commands[] = ajax_command_insert(NULL, $html);
    //Retourne un renderable ajax.
    return array(
      '#type' => 'ajax',
      '#commands' => $commands,
    );

Grâce à une fonction de ce type, lors du succès (au sens ajax) la fonction successCallback sera appelée avec comme paramètre l'item du form_state.

Fonction JavaScript

Dans le fichier javascript lié au formulaire il faut ajouter la fonction qui sera exécutée :

$.fn.successCallback = function(item) {
  console.log(item);
};

On peut ainsi effectuer un traitement côté client qui sera déclenché seulement lors de l'appel ajax de notre formulaire. Les commandes pouvant être utilisés dans la fonction côté serveur sont documentées dans le fichier misc/ajax.inc

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.