Thông báo trạng thái với AJAX


11

Tôi đang thực hiện cuộc gọi AJAX trong drupal 7 thông qua AJAX Framework tiêu chuẩn. Vấn đề của tôi là khi một thông báo trạng thái được đặt bởi cuộc gọi lại AJAX, nó sẽ bị mất (hoặc hiển thị ở lần tải lại tiếp theo của trang). Làm cách nào tôi có thể hiển thị các thông báo trạng thái ngay sau khi cuộc gọi lại AJAX đã chạy xong mà không cần tải lại trang? Có một mô-đun cho điều đó?

Câu trả lời:


13

Bạn có thể kết xuất các thông báo trạng thái và gửi chúng dưới dạng lệnh AJAX anohter.

Ví dụ:

$commands = array();

// Add other commands

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

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

Ít nhất đây là cách tôi giải quyết vấn đề này khi tôi đối mặt với nó.


Bạn là một vị cứu tinh !!! : D Cảm ơn rất nhiều.
SGhosh

Việc sử dụng chủ đề ('status_messages') trong đó là gì?
aegc

@Bebang Bakikang kết xuất các thông báo trạng thái, trả về mã HTML với các thông báo trạng thái hiện tại.
sanzante

8

Đối với Drupal 8, nó

$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

Đối với mẫu Drupal 8 với AJAX, câu trả lời của Tim Bozeman đã hoạt động, nhưng các tin nhắn được hiển thị không có kiểu dáng. Đây là những gì làm việc cho tôi:

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

return $response;

0

cho tôi

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

đã làm việc. trong đó # nội dung chính là tiêu chuẩn và có thể cần được tùy chỉnh cho vị trí thông điệp chính của chủ đề của bạn. (có lẽ bạn phải thay đổi phương thức thứ hai thành ajax_command_append () hoặc phương thức khác)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.