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?

mimrock
fuente

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é.

sanzante
fuente
¡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;
Tim Bozeman
fuente
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;
usuario3290238
fuente
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)

rémy
fuente