Puis-je appeler deux fonctions de rappel en un seul appel ajax?

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?

Laisser un commentaire

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