【发布时间】:2015-11-12 19:50:54
【问题描述】:
我想要一个可以检测是否被 jquery 调用的脚本
如果不是,它会显示页面+布局,如果不是,它只是内容(但这无关紧要)
但是,是的,一种检测它是由 jquery load - ajax - 还是直接请求调用的方法。
干杯!
【问题讨论】:
我想要一个可以检测是否被 jquery 调用的脚本
如果不是,它会显示页面+布局,如果不是,它只是内容(但这无关紧要)
但是,是的,一种检测它是由 jquery load - ajax - 还是直接请求调用的方法。
干杯!
【问题讨论】:
您可能想看看您的服务器正在接收的 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 被执行时,“测试”<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 使用的解决方案。
【讨论】:
if($_SERVER['HTTP_X_REQUESTED_WITH']) { } 就可以了。不需要多余的东西。
你不能在负载中发送一个 GET 参数吗?
即:
jquery=1 //(for load)
jquery=2 //(for the 'low-level' ajax call)
正常脚本加载的任何其他值
然后让 PHP 脚本处理确定下一步要做什么。通过读取$_GET['jquery']的值
【讨论】:
$_SERVER['HTTP_X_REQUESTED_WITH']。毕竟,这正是它的用途——查看请求是否来自 Ajax 实现。
如果我没记错的话,jQuery 的 AJAX 函数会发送一个 X-Requested-With 标头(值为 XMLHttpRequest)。
【讨论】:
如果你使用 Zend 框架,你可以使用
// in one of your controllers
if ($this->getRequest()->isXmlHttpRequest()) {
// ...
}
http://framework.zend.com/manual/en/zend.controller.request.html
【讨论】: