Mohu zavolat dvě funkce zpětného volání v jednom hovoru ajax?

Chci jen vědět, jak můžeme dosáhnout dvou zpětných volání Ajaxu na jednom odeslaném formuláři. Je to možné? a jak?

Odpověď

Ne, není to možné. Proč by to mělo být Zpětné volání Ajaxu může vrátit část kódu HTML, která nahradí vaši obálku AJAX. Pokud zavoláte dva, který z nich by použil Drupal? Jak by to mělo rozhodnout? Proto je #ajax["callback"] definován jako název funkce, nikoli jako řada jmen. S jednou funkcí vyhnete se takovým problémům.

Pokud potřebujete zavolat dvě funkce v reakci na událost AJAX, napište zpětné volání, které bude obsahovat logiku, na kterou jsem se ptal v prvním odstavci, a zavolejte funkce, které potřebujete z tohoto zpětného volání .

Odpovědět

Nemůžete to udělat přímo. Místo toho použijte funkci, která volá dvě další funkce.

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

Potom:

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

Ujistěte se, že vaše zpětná volání nezasahují.

Komentáře

  • Získejte upvote. Také je užitečné mít na paměti, že zpětné volání Ajaxu vrací array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ příkazy); Může se stát, že ' je jednodušší zavolat první zpětné volání, než do hovoru přidat některé hodnoty do pole #commands druhé zpětné volání. Může to být duplicitní funkce, ale může se také stát, že celé zpětné volání není ' t vyžadováno.
  • Ano, griz, máte pravdu. exmaple je velmi jednoduchý, ale jak říkáte, ' d je lepší sloučit re výsledky obou funkcí. Ale mějte na paměti, že použití dvou funkcí je hack.
  • @tunic – > Je možné mít dva obalové prvky?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *