Messages d'état avec AJAX

11

Je fais un appel AJAX dans drupal 7 via le framework AJAX standard. Mon problème est que lorsqu'un message d'état est défini par le rappel AJAX, il est simplement perdu (ou affiché lors du prochain rechargement de la page). Comment puis-je afficher les messages d'état juste après la fin du rappel AJAX, sans recharger la page? Existe-t-il un module pour cela?

mimrock
la source

Réponses:

13

Vous pouvez afficher les messages d'état et les envoyer sous forme de commande AJAX.

Par exemple:

$commands = array();

// Add other commands

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

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

C'est du moins ainsi que j'ai résolu ce problème lorsque je l'ai affronté.

sanzante
la source
Tu es un sauveur !!! : D Merci beaucoup.
SGhosh
Quelle est l'utilité du thème ('status_messages') là-dedans?
aegc
@Bebang Bakikang affiche les messages d'état, renvoyant le code HTML avec les messages d'état actuels.
sanzante
8

Pour Drupal 8, c'est

$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
la source
3

Pour la forme Drupal 8 avec AJAX, la réponse de Tim Bozeman a fonctionné, mais les messages ont été affichés sans style. C'est ce qui a fonctionné pour moi:

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

return $response;
user3290238
la source
0

pour moi

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

travaillé. où # main-content est standard et doit peut-être être personnalisé pour la position des messages précis de votre thème. (vous devrez peut-être changer la deuxième méthode en ajax_command_append () ou une autre)

rémy
la source