web-dev-qa-db-ja.com

AJAX Drupal内のリクエストをどのように検出できますか?

私はDrupal検出方法AJAXリクエストを探しています。これをhook_form_alter内で確認する必要があります(AJAXサポート)

18
Codium

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();
30
Clive

パスにWordの「ajax」が含まれているかどうかを確認するには、フックでcurrent_path()を使用することを検討してください。

例:

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

AJAXリクエスト(HTTP_X_REQUESTED_WITHはなりすましの可能性があるため))の完全なチェック方法がないため、URLに基​​づく別の代替方法を次に示します。

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

ビューで機能します(最後のURIアイテムに「ajax」Wordが含まれている場合)。

参照: リクエストがAJAX PHPでのリクエスト?)かどうかを確認する方法

1
kenorb

Drupal=でフォームを操作する範囲のAJAXリクエストは、フォームを再構築する必要があることを意味します。フォームを再構築する必要があることを検出するには、以下を確認する必要があります。

$form_state['rebuild'] == TRUE;
1
Kirill Roskolii

私がそれをした方法は使用していた:

$request = $_SERVER['REQUEST_URI']

そこで私は?_wrapper_format = drupal_ajaxを検出しました

1