Повідомлення про статус за допомогою AJAX


11

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

Відповіді:


13

Ви можете надати повідомлення про стан і надіслати їх у вигляді команди AHAX.

Наприклад:

$commands = array();

// Add other commands

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

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

Принаймні, так я вирішив цю проблему, коли зіткнувся з нею.


Ти - Спаситель !!! : D Дякую так багато.
SGhosh

Яке використання теми ("status_messages") там?
alyssaeliyah

@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

Для друкарської форми 8 з AJAX відповідь Тіма Боземана працювала, але повідомлення з’являлися без стилів. Це для мене працювало:

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

return $response;

0

для мене

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

працювали. де # основний вміст є стандартним, і, можливо, його потрібно налаштувати для загостреного положення вашої теми. (можливо, вам доведеться змінити другий метод на ajax_command_append () або інший)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.