1つのフォーム送信で2つのajaxコールバックを実現する方法を知りたいだけです。それは可能ですか?また、その方法は?
回答
いいえ、できません。なぜだろう? Ajaxコールバックは、AJAXラッパーを置き換えるためにHTMLの一部を返すことができます。 2つと呼ぶ場合、Drupalはどちらを使用しますか?どのように決定する必要がありますか?そのため、 #ajax["callback"]
は、名前の配列ではなく、関数の名前として定義されています。1つの関数でそのような問題を回避できます。
AJAXイベントに応答して2つの関数を呼び出す必要がある場合は、最初の段落で質問したロジックを含むコールバックを記述し、そのコールバックから必要な関数を呼び出します。 。
回答
直接行うことはできません。代わりに、他の2つの関数を呼び出す関数を使用してください。
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
次に:
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; }
コールバックが干渉しないことを確認してください。
コメント
- 賛成票を投じてください。また、Ajaxコールバックが配列:return array(' #type ' = > ' ajax '、' #commands ' = > $ commands);最初のコールバックを呼び出してから、呼び出すよりも#commands配列にいくつかの値を追加する方が'簡単な場合があります。 2番目のコールバック。機能が重複している可能性がありますが、コールバック全体が'必要ない場合もあります。
- はい、そうです。 exmapleは非常に単純ですが、あなたが言うように' reをマージする方が良いでしょう2つの機能の結果。ただし、2つの関数を使用するのはハックであることに注意してください。
- @ tunic- > 2つのラッパー要素を持つことは可能ですか?