Ich möchte nur wissen, wie wir zwei Ajax-Rückrufe auf einem Formular erzielen können. Ist dies möglich und wie?
Antwort
Nein, das ist nicht möglich. Warum sollte es sein? Ajax-Rückruf kann ein Stück HTML zurückgeben, um Ihren AJAX-Wrapper zu ersetzen. Wenn Sie zwei anrufen, welche würde Drupal verwenden? Wie soll es entscheiden? Aus diesem Grund wird #ajax["callback"]
als Name einer Funktion definiert, nicht als Array von Namen mit einer Funktion Sie vermeiden solche Probleme.
Wenn Sie als Reaktion auf ein AJAX-Ereignis zwei Funktionen aufrufen müssen, schreiben Sie einen Rückruf, der die Logik enthält, nach der ich im ersten Absatz gefragt habe, und rufen Sie die Funktionen auf, die Sie von diesem Rückruf benötigen .
Antwort
Sie können dies nicht direkt tun. Verwenden Sie stattdessen eine Funktion, die die beiden anderen Funktionen aufruft.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Dann:
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; }
Stellen Sie sicher, dass Ihre Rückrufe nicht stören.
Kommentare
- Stimmen Sie ab. Beachten Sie auch, dass ein Ajax-Rückruf eine zurückgibt Array: Array zurückgeben (' #type ' = > ' ajax ', ' #commands ' = > $ -Befehle); Es kann sein, dass es ' einfacher ist, den ersten Rückruf aufzurufen und dann einige Werte zum Array #commands hinzuzufügen, anstatt aufzurufen Der zweite Rückruf. Möglicherweise handelt es sich um eine doppelte Funktionalität, aber es kann auch sein, dass der gesamte Rückruf nicht ' erforderlich ist.
- Ja, griz, Sie haben Recht Beispiel ist sehr einfach, aber wie Sie sagen, ' wäre es besser, das re zusammenzuführen Ergebnisse der beiden Funktionen. Beachten Sie jedoch, dass die Verwendung von zwei Funktionen ein Hack ist.
- @tunic – > Ist es möglich, zwei Wrapper-Elemente zu haben?