1回のajax呼び出しで2つのコールバック関数を呼び出すことはできますか?

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つのラッパー要素を持つことは可能ですか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です