¿Puedo llamar a dos funciones de devolución de llamada en una llamada ajax?

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?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *