Làm cách nào tôi có thể phát hiện yêu cầu AJAX bên trong Drupal?


Câu trả lời:


28

Đối với Drupal 7 không có gì đặc biệt trong API, chỉ cần sử dụng PHP đơn giản:

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  // AJAX request
}

Đối với Drupal 8, đối tượng yêu cầu Symfony có phương thức trợ giúp:

// Example for brevity only, inject the request_stack service and call 
// getCurrentRequest() on it to get the request object if possible.
$request = \Drupal::request();
$is_ajax = $request->isXmlHttpRequest();

Tôi đang cố kiểm tra xem yêu cầu đến từ nút tải lên hình ảnh. 'HTTP_X_REQUESTED_WITH' không tồn tại trong mảng máy chủ $. Bất kỳ ý tưởng?
Mouneer

tiết kiệm giờ !! Nhiều đánh giá cao !!
JayKandari

Cảm ơn, @Clive!
aserww106

9

Bạn có thể xem xét sử dụng current_path () trong hook của mình, để kiểm tra xem đường dẫn có chứa từ 'ajax' trong đó không.

Vd

$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
    echo 'AJAX request detected!';
    exit;
}

3
Có thể hoạt động 95% nhưng có vẻ như điều này không được đảm bảo. Đầu tiên, không phải chỉ quy ước rằng chuỗi 'ajax' là một phần của đường dẫn cho các yêu cầu ajax sao? Bất kỳ mô-đun đóng góp có thể đăng ký bất kỳ con đường nó chọn. Thứ hai, không thể có đường dẫn không phải là ajax có chứa chuỗi 'ajax'? Ví dụ: có thể đặt đường dẫn cho chế độ xem hoặc trang bảng thành 'myajaxpage' không?
AdamS

0

Vì không có phương pháp kiểm tra đạn yêu cầu AJAX ( HTTP_X_REQUESTED_WITHcó thể bị giả mạo), đây là một cách khác dựa trên URL:

if (end((arg())) == 'ajax') {
  // AJAX request
}

Hoạt động cho các chế độ xem (trong trường hợp khi mục URI cuối cùng chứa từ 'ajax').

Xem thêm: Làm thế nào để kiểm tra xem yêu cầu có phải là yêu cầu AJAX với PHP không?


Tôi nghĩ rằng trong trường hợp tệp / ajax và media / ajax có thể có các tham số bổ sung trên URL, vì vậy ajax sẽ không ở cuối. Ví dụ / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

Yêu cầu AJAX trong phạm vi làm việc với các biểu mẫu trong Drupal có nghĩa là biểu mẫu đó phải được xây dựng lại. Để phát hiện hình thức đó phải được xây dựng lại, người ta phải kiểm tra:

$form_state['rebuild'] == TRUE;

0

Tôi đã sử dụng nó như thế nào:

$request = $_SERVER['REQUEST_URI']

Ở đó tôi đã phát hiện ra? _Wrapper_format = drupal_ajax

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.