Solo quiero saber cómo podemos lograr dos devoluciones de llamada ajax en un envío de formulario. ¿Es posible? y ¿cómo?
Respuesta
No, no es posible. ¿Por qué sería? La devolución de llamada Ajax puede devolver un fragmento de HTML para reemplazar su contenedor AJAX. Si llama a dos, ¿cuál usaría Drupal? ¿Cómo debería decidir? Es por eso que #ajax["callback"]
se define como el nombre de una función, no como una matriz de nombres. Con una función evita problemas como ese.
Si necesita llamar a dos funciones en respuesta al evento AJAX, escriba una devolución de llamada que incluya la lógica que le pregunté en el primer párrafo y llame a las funciones que necesita de esa devolución de llamada .
Responder
No puede hacer eso directamente. En su lugar, use una función que llame a las otras dos funciones.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Entonces:
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; }
Asegúrese de que sus devoluciones de llamada no interfieran.
Comentarios
- Tenga un voto a favor. También es útil tener en cuenta que una devolución de llamada Ajax devuelve un array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ comandos); Es posible que sea ' más simple llamar a la primera devolución de llamada, luego agregar algunos valores a la matriz #commands en lugar de llamar la segunda devolución de llamada. Podría estar duplicando la funcionalidad, pero también podría ser que toda la devolución de llamada no sea ' t requerida.
- Sí, griz, tienes razón. El ejemplo es muy simple, pero como usted lo dice ' sería mejor fusionar el re resultados de las dos funciones. Pero tenga en cuenta que usar dos funciones es un truco.
- @tunic – > ¿Es posible tener dos elementos de envoltura?