Posso chiamare due funzioni di callback in una chiamata ajax?

Voglio solo sapere come possiamo ottenere due callback ajax su un unico modulo. È possibile? e come?

Risposta

No, non è possibile. Perché dovrebbe essere? Il callback Ajax può restituire un pezzo di HTML per sostituire il wrapper AJAX. Se ne chiamerai due, quale userebbe Drupal? Come dovrebbe decidere? Ecco perché #ajax["callback"] è definito come un nome di una funzione, non un array di nomi. Con una funzione eviti problemi del genere.

Se devi chiamare due funzioni in risposta a un evento AJAX, scrivi un callback che includa la logica di cui ho chiesto nel primo paragrafo e chiama le funzioni che ti servono da quel callback .

Risposta

Non puoi farlo direttamente. Utilizza invece una funzione che richiami le altre due funzioni.

"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ... 

Quindi:

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; } 

Assicurati che i tuoi callback non interferiscano.

Commenti

  • Avere un voto positivo. Utile anche per tenere a mente che un callback Ajax restituisce un array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ comandi); Potrebbe essere ' più semplice chiamare il primo callback, quindi aggiungere alcuni valori allarray #commands invece di chiamare il secondo callback. Potrebbe essere una funzionalità di duplicazione, ma potrebbe anche essere che lintero callback non è ' t richiesto.
  • Sì griz, hai ragione. exmaple è molto semplice, ma come dici tu ' sarebbe meglio unire il re sulti delle due funzioni. Ma tieni presente che lutilizzo di due funzioni è un trucco.
  • @tunic – > È possibile avere due elementi wrapper?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *