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

リクエストが画像アップロードボタンから来ているかどうかを確認しようとしています。「HTTP_X_REQUESTED_WITH」が$ server配列に存在しません。何か案は?
ムーニー

節約時間!! 大変感謝いたします !!
JayKandari

ありがとう、@ Clive!
aserww106

9

パスに「ajax」という単語が含まれているかどうかを確認するために、フックでcurrent_path()を使用することを検討できます。

例:

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

3
95%動作する可能性がありますが、これは保証されていないようです。まず、文字列「ajax」がajaxリクエストのパスの一部であるという慣習だけではありませんか?contribモジュールは、選択したパスを登録できます。次に、非ajaxパスに文字列「ajax」を含めることができませんでしたか?たとえば、ビューまたはパネルページのパスを「myajaxpage」に設定できますか?
AdamS

0

A HTTP_X_REQUESTED_WITHなりすましのリクエストをチェックする防弾の方法がないため(スプーフィングされる可能性があるため)、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;

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.