Answers:
对于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”。
例如:
$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”字)。
在Drupal中使用表单的范围内的AJAX请求意味着必须重新构建表单。要检测必须重建的表单,应检查以下内容:
$form_state['rebuild'] == TRUE;
我是如何使用的:
$request = $_SERVER['REQUEST_URI']
在那里,我检测到了?_wrapper_format = drupal_ajax