Messaggi di stato con AJAX


11

Sto effettuando una chiamata AJAX in drupal 7 tramite il framework AJAX standard. Il mio problema è che quando un messaggio di stato viene impostato dal callback AJAX, viene semplicemente perso (o visualizzato alla successiva ricarica della pagina). Come posso visualizzare i messaggi di stato al termine dell'esecuzione del callback AJAX, senza ricaricare la pagina? C'è un modulo per quello?

Risposte:


13

È possibile eseguire il rendering dei messaggi di stato e inviarli come un altro comando AJAX.

Per esempio:

$commands = array();

// Add other commands

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

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

Almeno questo è il modo in cui ho risolto questo problema quando l'ho affrontato.


Sei un salvatore !!! : D Grazie mille.
SGhosh,

A che cosa serve il tema ("status_messages")?
aegc

@Bebang Bakikang esegue il rendering dei messaggi di stato, restituendo il codice HTML con i messaggi di stato correnti.
sanzante,

8

Per Drupal 8 lo è

$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

Per il modulo Drupal 8 con AJAX, la risposta di Tim Bozeman ha funzionato, ma i messaggi sono stati mostrati senza stile. Questo è ciò che ha funzionato per me:

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

return $response;

0

per me

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

lavorato. dove # main-content è standard e forse deve essere personalizzato per la posizione acuta dei messaggi del tema. (forse devi cambiare il secondo metodo in ajax_command_append () o in un altro)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.