Pas*_*TIN 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>
Run Code Online (Sandbox Code Playgroud)
而temp.php脚本只包含这个:
<?php
var_dump($_SERVER);
die;
Run Code Online (Sandbox Code Playgroud)
当load被执行时,"测试" <div>将包含的转储$_SERVER; 它包括这个,除其他外:
'HTTP_X_REQUESTED_WITH' => string 'XMLHttpRequest' (length=14)
Run Code Online (Sandbox Code Playgroud)
XMLHttpRequest 是用于发出Ajax请求的对象.
这意味着您应该能够检测请求是否是通过AJax查询进行的,具体如下:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
echo "Ajax";
} else {
echo "Not Ajax";
}
Run Code Online (Sandbox Code Playgroud)
有了这个,您可以检测您的页面是"正常"调用,还是通过Ajax请求,并决定是否必须包含布局.
顺便说一句:这正是Zend Framework用来检测Ajax请求的解决方案.
你能不用负载发送GET参数吗?
即:
jquery=1 //(for load)
jquery=2 //(for the 'low-level' ajax call)
Run Code Online (Sandbox Code Playgroud)
正常脚本加载的任何其他值
然后让PHP脚本处理确定下一步做什么.通过阅读的价值$_GET['jquery']