Pot apela două funcții de apel invers într-un singur apel ajax?

Vreau doar să știu cum putem realiza două apeluri de apel ajax la un singur formular de trimitere. Este posibil? și cum?

Răspuns

Nu, nu este posibil. De ce ar fi? Rambursarea Ajax poate returna o bucată de HTML pentru a înlocui învelișul dvs. AJAX. Dacă veți apela doi, pe care l-ar folosi Drupal? Cum ar trebui să decidă? Acesta este motivul pentru care #ajax["callback"] este definit ca un nume al unei funcții, nu ca o matrice de nume. Cu o singură funcție evitați astfel de probleme.

Dacă trebuie să apelați două funcții ca răspuns la evenimentul AJAX, atunci scrieți un callback care va include logica despre care am întrebat în primul paragraf și funcțiile de apel de care aveți nevoie din acel callback .

Răspuns

Nu poți face asta direct. În schimb, utilizați o funcție care apelează celelalte două funcții.

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

Apoi:

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

Asigurați-vă că apelurile dvs. nu interferează.

Comentarii

  • Aveți un vot pozitiv. De asemenea, este util să rețineți că un apel invers Ajax returnează un array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ comenzi); s-ar putea ca ' să fie mai simplu să apelați primul callback, apoi să adăugați câteva valori în matricea #commands în loc să apelați al doilea apel invers. S-ar putea să dubleze funcționalitatea, dar s-ar putea, de asemenea, să nu fie necesară întreaga apelare inversă '.
  • Da, griz, ai dreptate. exmaple este foarte simplu, dar așa cum spui ' ar fi mai bine să fuzionezi re rezultatele celor două funcții. Dar rețineți că utilizarea a două funcții este un hack.
  • @tunic – > Este posibil să aveți două elemente de împachetare?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *