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ł?

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.


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;

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;

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ą)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.