回答:
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();
パスに「ajax」という単語が含まれているかどうかを確認するために、フックでcurrent_path()を使用することを検討できます。
例:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
A HTTP_X_REQUESTED_WITH
なりすましのリクエストをチェックする防弾の方法がないため(スプーフィングされる可能性があるため)、URLに基づく別の代替方法を次に示します。
if (end((arg())) == 'ajax') {
// AJAX request
}
ビューに対して機能します(最後のURIアイテムに「ajax」ワードが含まれる場合)。
私がそれをした方法は使用していました:
$request = $_SERVER['REQUEST_URI']
そこで、?_ wrapper_format = drupal_ajaxが検出されました