Statusmeldungen mit AJAX

11

Ich mache einen AJAX-Aufruf in Drupal 7 über das Standard-AJAX-Framework. Mein Problem ist, dass eine Statusmeldung, die durch den AJAX-Rückruf festgelegt wird, einfach verloren geht (oder beim nächsten Neuladen der Seite angezeigt wird). Wie kann ich die Statusmeldungen direkt nach Beendigung des AJAX-Rückrufs anzeigen, ohne die Seite neu zu laden? Gibt es dafür ein Modul?

Mimrock
quelle

Antworten:

13

Sie können die Statusmeldungen rendern und als weiteren AJAX-Befehl senden.

Zum Beispiel:

$commands = array();

// Add other commands

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

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

Zumindest habe ich dieses Problem auf diese Weise gelöst, als ich damit konfrontiert wurde.

Sanzante
quelle
Du bist ein Retter !!! : D Vielen Dank.
SGhosh
Was nützt das Thema ('status_messages') dort?
Aegc
@Bebang Bakikang rendert die Statusmeldungen und gibt HTML-Code mit den aktuellen Statusmeldungen zurück.
Sanzante
8

Für Drupal 8 ist es

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

Für das Drupal 8-Formular mit AJAX funktionierte die Antwort von Tim Bozeman, aber Nachrichten wurden ohne Styling angezeigt. Das hat bei mir funktioniert:

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

return $response;
user3290238
quelle
0

für mich

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

hat funktioniert. Dabei ist # main-content Standard und muss möglicherweise an die Position Ihres Themas für akute Nachrichten angepasst werden. (Möglicherweise müssen Sie die zweite Methode in ajax_command_append () oder eine andere ändern. )

rémy
quelle