Сообщения о состоянии с AJAX

11

Я делаю AJAX-вызов в drupal 7 через стандартную AJAX Framework. Моя проблема в том, что когда сообщение о состоянии устанавливается обратным вызовом AJAX, оно просто теряется (или отображается при следующей перезагрузке страницы). Как я могу отображать сообщения о состоянии сразу после завершения обратного вызова AJAX без перезагрузки страницы? Есть ли модуль для этого?

mimrock
источник

Ответы:

13

Вы можете отображать сообщения о состоянии и отправлять их как AOHTER AJAX команду.

Например:

$commands = array();

// Add other commands

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

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

По крайней мере, так я решил эту проблему, когда столкнулся с ней.

sanzante
источник
Ты Спаситель !!! : D Спасибо тебе большое.
SGhosh
Какая польза от темы (status_messages)?
Алиссаэлия
@Bebang Bakikang отображает сообщения о состоянии, возвращая HTML-код с сообщениями о текущем состоянии.
sanzante
8

Для 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;
Тим Бозман
источник
3

Для формы Drupal 8 с AJAX ответ Тима Боземана сработал, но сообщения отображались без стилизации. Вот что сработало для меня:

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

return $response;
user3290238
источник
0

для меня

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

работал. где # main-content является стандартным, и, возможно, его необходимо настроить в соответствии с позицией сообщений вашей темы. (возможно, вам придется изменить второй метод на ajax_command_append () или другой)

rémy
источник