Mensajes de estado con AJAX


11

Estoy haciendo una llamada AJAX en drupal 7 a través del Marco AJAX estándar. Mi problema es que cuando la devolución de llamada AJAX establece un mensaje de estado, simplemente se pierde (o se muestra en la próxima recarga de la página). ¿Cómo puedo mostrar los mensajes de estado justo después de que la devolución de llamada AJAX haya terminado de ejecutarse, sin volver a cargar la página? ¿Hay un módulo para eso?

Respuestas:


13

Puede representar los mensajes de estado y enviarlos como otro comando AJAX.

Por ejemplo:

$commands = array();

// Add other commands

$commands[] = ajax_command_prepend('div#ajax-status-messages-wrapper', theme('status_messages'));

return array('#type' => 'ajax', '#commands' => $commands);

Al menos así resolví este problema cuando lo enfrenté.


¡Eres un salvador! : D Muchas gracias.
SGhosh

¿Para qué sirve el tema ('status_messages') allí?
aegc

@Bebang Bakikang procesa los mensajes de estado, devolviendo el código HTML con los mensajes de estado actuales.
sanzante

8

Para Drupal 8 es

$response = new AjaxResponse();    
$status_messages = array('#type' => 'status_messages');
$messages = \Drupal::service('renderer')->renderRoot($status_messages);
if (!empty($messages)) {
  $response->addCommand(new PrependCommand('.your_selector', $messages));
}

return $response;

3

Para el formulario Drupal 8 con AJAX, la respuesta de Tim Bozeman funcionó, pero los mensajes se mostraron sin estilo. Esto es lo que funcionó para mí:

$response = new AjaxResponse();
drupal_set_message($action);
$form['messages']['status'] = [
  '#type' => 'status_messages',
];
$response->addCommand(new InsertCommand(null, $form['messages']));

return $response;

0

para mi

$commands[] = ajax_command_remove('div.messages');
$commands[] = ajax_command_after('#main-content', theme('status_messages'));

trabajó. donde # main-content es estándar, y quizás deba personalizarse para la posición de los mensajes agudos de su tema. (tal vez tenga que cambiar el segundo método a ajax_command_append () u otro)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.