我想要一个可以检测是否被jquery调用的脚本
如果没有,它会显示页面+布局,如果没有,它只是内容(但这是无关紧要的)
但是,是一种检测它是否被jquery load-ajax调用或直接请求的方法。
干杯!
答案 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