Mensagens de status com AJAX

11

Estou fazendo uma chamada AJAX no drupal 7 por meio do AJAX Framework padrão. Meu problema é que, quando uma mensagem de status é definida pelo retorno de chamada AJAX, ela é simplesmente perdida (ou exibida na próxima recarga da página). Como posso exibir as mensagens de status logo após a execução do retorno de chamada AJAX, sem recarregar a página? Existe um módulo para isso?

mimrock
fonte

Respostas:

13

Você pode renderizar as mensagens de status e enviá-las como comando AJAX do ano.

Por exemplo:

$commands = array();

// Add other commands

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

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

Pelo menos foi assim que resolvi esse problema quando o enfrentei.

sanzante
fonte
Você é um Salvador !!! : D Muito obrigado.
precisa saber é o seguinte
Para que serve o tema ('status_messages') lá?
aegc
O @Bebang Bakikang processa as mensagens de status, retornando o código HTML com as mensagens de status atuais.
sanzante
8

Para o Drupal 8, é

$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
fonte
3

Para o formulário Drupal 8 com AJAX, a resposta de Tim Bozeman funcionou, mas as mensagens foram exibidas sem estilo. Isto é o que funcionou para mim:

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

return $response;
user3290238
fonte
0

para mim

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

trabalhou. onde # main-content é padrão e talvez precise ser personalizado para a posição de mensagens acutéticas do seu tema. (talvez você precise alterar o segundo método para ajax_command_append () ou outro)

rémy
fonte