Bagaimana saya bisa mendeteksi permintaan AJAX di dalam Drupal?


Jawaban:


28

Untuk Drupal 7 tidak ada yang istimewa di API, cukup gunakan PHP biasa:

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

Untuk Drupal 8, objek permintaan Symfony memiliki metode pembantu:

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

Saya mencoba memeriksa apakah permintaan datang dari tombol unggah gambar. 'HTTP_X_REQUESTED_WITH' tidak ada di $ array server. Ada Ide?
Mouneer

menghemat waktu !! sangat dihargai !!
JayKandari

Terima kasih, @Clive!
aserww106

9

Anda dapat mempertimbangkan menggunakan current_path () di hook Anda, untuk memeriksa apakah path berisi kata 'ajax' di dalamnya.

Ex:

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

3
Mungkin bekerja 95% tetapi sepertinya ini tidak dijamin. Pertama bukan hanya konvensi bahwa string 'ajax' adalah bagian dari path untuk permintaan ajax? Modul contrib dapat mendaftarkan jalur apa pun yang dipilihnya. Kedua, bisakah jalur non-ajax berisi string 'ajax'? Misalnya, dapat menetapkan jalur untuk halaman tampilan atau panel ke 'myajaxpage'?
AdamS

0

Karena tidak ada metode anti peluru untuk memeriksa permintaan AJAX (seperti HTTP_X_REQUESTED_WITHdapat dipalsukan), berikut adalah alternatif lain berdasarkan URL:

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

Bekerja untuk tampilan (jika item URI terakhir berisi kata 'ajax').

Lihat juga: Bagaimana memeriksa apakah permintaan tersebut adalah permintaan AJAX dengan PHP?


Saya pikir dalam kasus file / ajax dan media / ajax kemungkinan ada parameter tambahan pada URL, jadi ajax tidak akan berada di akhir. Misalnya / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

Permintaan AJAX dalam lingkup bekerja dengan formulir di Drupal berarti formulir itu harus dibangun kembali. Untuk mendeteksi formulir yang harus dibangun kembali, seseorang harus memeriksa:

$form_state['rebuild'] == TRUE;

0

Bagaimana saya melakukannya menggunakan:

$request = $_SERVER['REQUEST_URI']

Di sana saya mendeteksi? _Wrapper_format = drupal_ajax

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.