Pesan status dengan AJAX

11

Saya membuat panggilan AJAX di drupal 7 melalui Kerangka AJAX standar. Masalah saya adalah bahwa ketika pesan status diatur oleh panggilan balik AJAX, pesan itu hilang begitu saja (atau ditampilkan pada pemuatan ulang halaman berikutnya). Bagaimana saya bisa menampilkan pesan status tepat setelah panggilan balik AJAX selesai berjalan, tanpa memuat ulang halaman? Apakah ada modul untuk itu?

mimrock
sumber

Jawaban:

13

Anda dapat merender pesan status dan mengirimkannya sebagai perintah AJAX yang lebih baik.

Sebagai contoh:

$commands = array();

// Add other commands

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

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

Setidaknya ini adalah cara saya memecahkan masalah ini ketika saya menghadapinya.

sanzante
sumber
You Are A Savior !!! : D Terima kasih banyak.
SGhosh
Apa gunanya tema ('status_messages') di sana?
aegc
@Bebang Bakikang merender pesan status, mengembalikan kode HTML dengan pesan status saat ini.
sanzante
8

Untuk Drupal 8 itu

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

Untuk formulir Drupal 8 dengan AJAX, jawaban oleh Tim Bozeman berfungsi, tetapi pesan muncul tanpa gaya. Inilah yang bekerja untuk saya:

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

return $response;
pengguna3290238
sumber
0

untuk saya

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

bekerja. di mana # konten utama adalah standar, dan mungkin perlu disesuaikan untuk posisi pesan akut tema Anda. (mungkin Anda harus mengubah metode kedua menjadi ajax_command_append () atau yang lain)

Remy
sumber