Kan jag ringa två återuppringningsfunktioner i ett ajax-samtal?

Jag vill bara veta hur vi kan uppnå två ajax-återuppringningar på en formulärsändning. Är det möjligt? och hur?

Svar

Nej, det är inte möjligt. Varför skulle det vara? Ajax-återuppringning kan returnera en bit HTML för att ersätta ditt AJAX-omslag. Om du kommer att ringa två, vilken skulle Drupal använda? Hur ska det avgöra? Därför definieras #ajax["callback"] som ett namn på en funktion, inte en matris med namn. Med en funktion du undviker sådana problem.

Om du behöver ringa två funktioner som svar på AJAX-händelsen, skriv sedan en återuppringning som innehåller den logik jag frågade om i första stycket och samtalsfunktioner du behöver från den återuppringningen .

Svar

Du kan inte göra det direkt. Använd istället en funktion som anropar de två andra funktionerna.

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

Sedan:

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

Se till att dina återuppringningar inte stör.

Kommentarer

  • Har en uppröstning. Det är också bra att tänka på att en Ajax-återuppringning returnerar en array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ -kommandon); Det kan vara så att det ' är enklare att ringa den första återuppringningen och sedan lägga till några värden i arrayen #commands snarare än att ringa den andra återuppringningen. Det kan vara duplicering av funktionalitet, men det kan också vara att hela återuppringningen inte är ' t krävs.
  • Ja griz, du har rätt. exmaple är väldigt enkelt, men som du säger är det ' bättre att slå samman re resultat av de två funktionerna. Men kom ihåg att använda två funktioner är ett hack.
  • @tunic – > Är det möjligt att ha två omslagselement?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *