Drupal içindeki AJAX isteğini nasıl tespit edebilirim?


Yanıtlar:


28

Drupal 7 için API'de özel bir şey yok, sadece düz PHP kullanın:

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

Drupal 8 için Symfony istek nesnesinin bir yardımcı yöntemi vardır:

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

Resim yükleme düğmesinden gelen istek olup olmadığını kontrol etmeye çalışıyorum. 'HTTP_X_REQUESTED_WITH' $ sunucu dizisinde mevcut değil. Herhangi bir fikir?
Mouneer

kaydedilmiş saatler !! çok takdir !!
JayKandari

Teşekkürler, @Clive!
aserww106

9

Yolda 'ajax' kelimesinin bulunup bulunmadığını kontrol etmek için çağrınızda current_path () yöntemini kullanmayı düşünebilirsiniz .

Ör:

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

3
% 95 çalışabilir, ancak bunun garanti edilmediği anlaşılıyor. Öncelikle, 'ajax' dizesinin ajax istekleri için yolun bir parçası olduğu sadece bir kural değil mi? Herhangi bir katkıda bulunan modül seçtiği herhangi bir yolu kaydedebilir. İkincisi, ajax olmayan bir yol 'ajax' dizesini içeremez mi? Örneğin, bir görünüm veya paneller sayfasının yolunu 'myajaxpage' olarak ayarlayabilir mi?
AdamS

0

AJAX isteğini kontrol etmek için kurşun geçirmez bir yöntem olmadığından ( HTTP_X_REQUESTED_WITHkimlik sahtekarlığı olduğu gibi ), URL'ye dayanan başka bir alternatif daha vardır:

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

Görünümler için çalışır (son URI öğesinin 'ajax' kelimesi içermesi durumunda).

Ayrıca bkz: İsteğin PHP ile AJAX isteği olup olmadığı nasıl kontrol edilir?


Dosya / ajax ve medya / ajax durumunda, URL'de fazladan parametreler olması muhtemel olduğunu düşünüyorum, bu yüzden ajax sonunda olmayacak. Örn / dosya / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXX
AdamS

0

Drupal'da formlarla çalışma kapsamındaki AJAX talebi, formun yeniden oluşturulması gerektiği anlamına gelir. Bu formun yeniden oluşturulması gerektiğini tespit etmek için aşağıdakileri kontrol etmelisiniz:

$form_state['rebuild'] == TRUE;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.