I'm making an AJAX call in drupal 7 via the standard AJAX Framework. My problem is that when a status message is set by the AJAX callback, it is simply lost (or displayed at the next reload of the page). How can I display the status messages right after the AJAX callback has finished running, without reloading the page? Is there a module for that?
You can render the status messages and send them as anohter AJAX command.
$commands = array(); // Add other commands $commands = ajax_command_prepend('div#ajax-status-messages-wrapper', theme('status_messages')); return array('#type' => 'ajax', '#commands' => $commands);
At least this is the way I solved this problem when I faced it.
For Drupal 8 form with AJAX, answer by Tim Bozeman worked, but messages were showed up with no styling. This is what worked for me:
$response = new AjaxResponse(); drupal_set_message($action); $form['messages']['status'] = [ '#type' => 'status_messages', ]; $response->addCommand(new InsertCommand(null, $form['messages'])); return $response;
$commands = ajax_command_remove('div.messages'); $commands = ajax_command_after('#main-content', theme('status_messages'));
worked. where #main-content is standard, and maybe needs to be customized for your theme's acutal messages position. (maybe you have to change the second method to ajax_command_append() or another)