Je veux juste savoir comment nous pouvons réaliser deux rappels ajax sur un formulaire soumis. Est-ce possible? et comment?
Réponse
Non, ce nest pas possible. Pourquoi serait-ce? Le rappel Ajax peut renvoyer un morceau de HTML pour remplacer votre wrapper AJAX. Si vous en appelez deux, lequel utiliserait Drupal? Comment devrait-il décider? Cest pourquoi #ajax["callback"]
est défini comme le nom dune fonction et non comme un tableau de noms. Avec une fonction vous évitez de tels problèmes.
Si vous devez appeler deux fonctions en réponse à lévénement AJAX, écrivez un rappel qui inclura la logique que jai posée dans le premier paragraphe, et appelez les fonctions dont vous avez besoin à partir de ce rappel .
Réponse
Vous ne pouvez pas faire cela directement. Utilisez plutôt une fonction qui appelle les deux autres fonctions.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Ensuite:
my_callbacks_wrapper($form, $form_state) { $first_callback_processed_form = first_callback($form, $form_state); $second_callback_processed_form = second_callback($first_callback_processed_form, $form_state); return $second_callback_processed_form; }
Assurez-vous que vos rappels ninterfèrent pas.
Commentaires
- Avoir un vote favorable. Il est également utile de garder à lesprit quun rappel Ajax renvoie un array: retourne le tableau (' #type ' = > ' ajax ', ' #commands ' = > $ commands); Il se peut que ' soit plus simple dappeler le premier rappel, puis dajouter des valeurs au tableau #commands plutôt que dappeler le deuxième rappel. Il peut sagir dune fonctionnalité de duplication, mais il se peut aussi que lensemble du rappel ne soit pas ' nécessaire.
- Oui griz, vous avez raison. Le exmaple est très simple, mais comme vous le dites ' il vaut mieux fusionner le re résultats des deux fonctions. Mais gardez à lesprit que lutilisation de deux fonctions est un hack.
- @tunic – > Est-il possible davoir deux éléments wrapper?