ฉันกำลังมองหาวิธี Drupal ในการตรวจสอบคำขอ AJAX ฉันต้องตรวจสอบสิ่งนี้ภายใน hook_form_alter (ฝังมุมมองด้วยการสนับสนุน AJAX)
ฉันกำลังมองหาวิธี Drupal ในการตรวจสอบคำขอ AJAX ฉันต้องตรวจสอบสิ่งนี้ภายใน hook_form_alter (ฝังมุมมองด้วยการสนับสนุน AJAX)
คำตอบ:
สำหรับ 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();
คุณอาจพิจารณาใช้current_path ()ในตะขอของคุณเพื่อตรวจสอบว่าเส้นทางมีคำว่า 'ajax' อยู่หรือไม่
Ex:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
เนื่องจากไม่มีวิธีการพิสูจน์กระสุนในการตรวจสอบคำขอ AJAX (ตามที่HTTP_X_REQUESTED_WITH
สามารถปลอมแปลงได้) นี่เป็นอีกทางเลือกหนึ่งตาม URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
ใช้งานได้กับมุมมอง (ในกรณีที่รายการ URI สุดท้ายมีคำว่า 'ajax')
ดูเพิ่มเติม: วิธีตรวจสอบว่าคำขอนั้นเป็นคำขอ AJAX กับ PHP หรือไม่
คำขอ AJAX ในขอบเขตการทำงานกับแบบฟอร์มใน Drupal จะหมายถึงว่าจะต้องสร้างแบบฟอร์มใหม่ ในการตรวจสอบรูปแบบนั้นจะต้องสร้างใหม่ควรตรวจสอบ:
$form_state['rebuild'] == TRUE;
ฉันใช้มันอย่างไร:
$request = $_SERVER['REQUEST_URI']
มีฉันตรวจพบ? _wrapper_format = drupal_ajax