ฉันจะตรวจสอบคำขอ AJAX ภายใน Drupal ได้อย่างไร


18

ฉันกำลังมองหาวิธี Drupal ในการตรวจสอบคำขอ AJAX ฉันต้องตรวจสอบสิ่งนี้ภายใน hook_form_alter (ฝังมุมมองด้วยการสนับสนุน AJAX)


สิ่งนี้อาจช่วยได้: drupal.stackexchange.com/questions/86939/…
shasi

คำตอบ:


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 array ความคิดใด ๆ
Mouneer

ประหยัดชั่วโมง !! ชื่นชมมาก !!
JayKandari

ขอบคุณ @Clive!
aserww106

9

คุณอาจพิจารณาใช้current_path ()ในตะขอของคุณเพื่อตรวจสอบว่าเส้นทางมีคำว่า 'ajax' อยู่หรือไม่

Ex:

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

3
อาจทำงานได้ 95% แต่ดูเหมือนจะไม่รับประกัน ประการแรกไม่เพียงแค่การประชุมที่สตริง 'ajax' เป็นส่วนหนึ่งของเส้นทางสำหรับการร้องขอ ajax? โมดูล contrib ใด ๆ สามารถลงทะเบียนเส้นทางใดก็ได้ที่เลือก ประการที่สองเส้นทางที่ไม่ใช่อาแจ็กซ์ไม่สามารถเกิดขึ้นเพื่อให้มีสตริงที่ 'อาแจ็กซ์'? เช่นสามารถตั้งค่าพา ธ สำหรับหน้าดูหรือพาเนลเป็น 'myajaxpage' ได้หรือไม่
AdamS

0

เนื่องจากไม่มีวิธีการพิสูจน์กระสุนในการตรวจสอบคำขอ AJAX (ตามที่HTTP_X_REQUESTED_WITHสามารถปลอมแปลงได้) นี่เป็นอีกทางเลือกหนึ่งตาม URL:

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

ใช้งานได้กับมุมมอง (ในกรณีที่รายการ URI สุดท้ายมีคำว่า 'ajax')

ดูเพิ่มเติม: วิธีตรวจสอบว่าคำขอนั้นเป็นคำขอ AJAX กับ PHP หรือไม่


ฉันคิดว่าในกรณีของไฟล์ / ajax และ media / ajax มีแนวโน้มที่จะมีพารามิเตอร์เพิ่มเติมใน URL ดังนั้น ajax จะไม่สิ้นสุด เช่น / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

คำขอ AJAX ในขอบเขตการทำงานกับแบบฟอร์มใน Drupal จะหมายถึงว่าจะต้องสร้างแบบฟอร์มใหม่ ในการตรวจสอบรูปแบบนั้นจะต้องสร้างใหม่ควรตรวจสอบ:

$form_state['rebuild'] == TRUE;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.