在PHP页面中检测AJAX请求?

时间:2013-11-28 11:02:22

标签: javascript php jquery ajax

这是检测AJAX请求的最可靠方法,还是在我的jQuery.ajax代码中添加自定义标头更安全?

function isAjaxRequest() {
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
        return TRUE;
    }
}
return FALSE;

}

关心旧版浏览器和旧版PHP安装,因为我想让我的代码在尽可能多的情况下工作。

3 个答案:

答案 0 :(得分:2)

  

这是检测AJAX请求的最可靠方法

这是你可能得到的肯定。

  

或者在我的jQuery.ajax代码中添加自定义标头更安全吗?

为什么要重复努力? jQuery已经添加了自定义标题。


忘记让服务器关心“Ajax”和“Not Ajax”之间的区别,而不是关心(例如)“想要JSON”和“想要HTML”。

您可以使用the HTTP Accept header

答案 1 :(得分:2)

没有安全的方法来检测Ajax请求。

Ajax请求与GET / POST普通网页浏览具有相同的模式。

X_开头的HTTP标头是自定义字段,甚至没有在每个Ajax库中实现。

您不应该依赖这些信息,因此要以完全不同的方式实现您想要实现的目标。

  

我确实关心旧版浏览器和旧版PHP安装   使我的代码在尽可能多的情况下工作。

如果这是您的目标,请忘记标题。

最好和最短的答案就在我的昆坦旁边:

  

忘记让服务器关心它会更干净   “Ajax”和“Not Ajax”之间的区别而不是关心   (例如)“想要JSON”和“想要HTML”。

在互联网上,你不能问“你来自哪里,你乘坐的是哪一个”,并得到一个可靠的答案。互联网的设计并不适合这类问题。

答案 2 :(得分:-2)

public function getIsAjaxRequest()
    {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
    }