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?