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?

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é.


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;

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;

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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.