是否有一种方法(在PHP中)检测脚本是否被jQuery加载调用?

时间:2009-09-26 20:19:10

标签: php jquery ajax load

我想要一个可以检测是否被jquery调用的脚本

如果没有,它会显示页面+布局,如果没有,它只是内容(但这是无关紧要的)

但是,是一种检测它是否被jquery load-ajax调用或直接请求的方法。

干杯!

4 个答案:

答案 0 :(得分:14)

您可能需要查看服务器正在接收的HTTP标头。

例如,让我们考虑一下这个页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script>
</head>
<body>
    <div id="test"></div>
    <script type="text/javascript">
        $('#test').load('temp.php');
    </script>
</body>
</html>

temp.php脚本只包含这个:

<?php
var_dump($_SERVER);

die;


执行load时,“test”<div>将包含$_SERVER的转储;除此之外,还包括:

'HTTP_X_REQUESTED_WITH' => string 'XMLHttpRequest' (length=14)

XMLHttpRequest是用于发出Ajax请求的对象。


这意味着您应该能够检测请求是否是通过AJax查询进行的,如下所示:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
    && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    echo "Ajax";
} else {
    echo "Not Ajax";
}

通过这种方式,您可以检测您的页面是“正常”调用,还是通过Ajax请求进行调用,并确定是否必须包含布局。


顺便说一句:这正是Zend Framework对detect Ajax requests使用的解决方案。

答案 1 :(得分:6)

您是否可以在加载时发送GET参数?

即:

jquery=1 //(for load)

jquery=2 //(for the 'low-level' ajax call)

正常脚本加载的任何其他值

然后让PHP脚本处理确定下一步做什么。通过阅读$_GET['jquery']

的值

答案 2 :(得分:6)

如果我没记错,jQuery的AJAX函数会发送X-Requested-With标题(值为XMLHttpRequest)。

答案 3 :(得分:1)

如果你正在使用Zend Framework,你可以使用

// in one of your controllers
if ($this->getRequest()->isXmlHttpRequest()) {
  // ...
}

http://framework.zend.com/manual/en/zend.controller.request.html