Drupal에서 AJAX 요청을 어떻게 감지합니까?


답변:


28

Drupal 7의 경우 API에는 특별한 것이 없으므로 일반 PHP를 사용하십시오.

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

Drupal 8의 경우 Symfony 요청 오브젝트에는 다음과 같은 헬퍼 메소드가 있습니다.

// 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();

요청이 이미지 업로드 버튼에서 오는지 확인하려고합니다. $ server 배열에 'HTTP_X_REQUESTED_WITH'가 없습니다. 어떤 아이디어?
Mouneer

시간 절약! 매우 감사 !!
JayKandari

감사합니다, @Clive!
aserww106

9

경로에 'ajax'라는 단어가 포함되어 있는지 확인하기 위해 hook에서 current_path () 사용을 고려할 수 있습니다 .

전의:

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

3
95 % 작동 할 수는 있지만 이것이 보장되지 않는 것 같습니다. 먼저 문자열 'ajax'가 아약스 요청 경로의 일부라는 것이 관습이 아닌가? 모든 contrib 모듈은 선택한 경로를 등록 할 수 있습니다. 두 번째로 비 아약스 경로가 문자열 'ajax'를 포함 할 수 없었습니까? 예를 들어보기 또는 패널 페이지의 경로를 'myajaxpage'로 설정할 수 있습니까?
AdamS

0

HTTP_X_REQUESTED_WITH스푸핑 가능한 AJAX 요청을 확인하는 방탄 방법이 없으므로 URL을 기반으로 한 다른 대안이 있습니다.

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

뷰에서 작동합니다 (마지막 URI 항목에 'ajax'단어가 포함 된 경우).

참조 : 요청이 PHP과 AJAX 요청이있는 경우 확인하는 방법?


file / ajax 및 media / ajax의 경우 URL에 추가 매개 변수가있을 수 있으므로 ajax는 끝이 아닙니다. 예 : / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

Drupal에서 양식 작업 범위에서 AJAX 요청은 양식을 다시 작성해야 함을 의미합니다. 해당 양식을 다시 작성해야 함을 감지하려면 다음을 확인해야합니다.

$form_state['rebuild'] == TRUE;

0

내가 사용한 방법 :

$request = $_SERVER['REQUEST_URI']

거기에? _wrapper_format = drupal_ajax가 감지되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.