Komunikaty o stanie w AJAX

11

Wykonuję wywołanie AJAX w Drupal 7 za pośrednictwem standardowego AJAX Framework. Mój problem polega na tym, że gdy komunikat o stanie jest ustawiany przez wywołanie zwrotne AJAX, jest po prostu gubiony (lub wyświetlany przy następnym przeładowaniu strony). Jak wyświetlić komunikaty o stanie bezpośrednio po zakończeniu oddzwaniania AJAX bez ponownego ładowania strony? Czy jest do tego moduł?

mimrock
źródło

Odpowiedzi:

13

Możesz renderować komunikaty o stanie i wysyłać je jako inne polecenie AJAX.

Na przykład:

$commands = array();

// Add other commands

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

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

Przynajmniej w ten sposób rozwiązałem ten problem, gdy się z nim zmierzyłem.

sanzante
źródło
Jesteś Zbawicielem !!! : D Dziękuję bardzo.
SGhosh
Do czego służy motyw („status_messages”)?
alyssaeliyah
@Bebang Bakikang renderuje komunikaty o stanie, zwracając kod HTML z aktualnymi komunikatami o stanie.
sanzante,
8

W przypadku Drupala 8 jest to możliwe

$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
źródło
3

W przypadku formularza Drupal 8 z AJAX odpowiedź Tima Bozemana działała, ale wiadomości były wyświetlane bez stylizacji. Oto, co zadziałało dla mnie:

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

return $response;
użytkownik3290238
źródło
0

dla mnie

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

pracował gdzie # main-content jest standardem i być może trzeba go dostosować do rzeczywistej pozycji wiadomości motywu. (być może musisz zmienić drugą metodę na ajax_command_append () lub inną)

rem
źródło