我有一个HTML文档,它使用AJAX调用从PHP文件加载内容。我的代码的重要部分如下:
default.html:
/*more code above*/
var PHP_URL = "content.php";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
'content.php'的文件是否可以检测到它是从'default.html'调用的,还是根据需要调用了不同的调用文档?
答案 0 :(得分:13)
大多数知名的Ajax框架(如jQuery和mooTools)都添加了一个特定的标头,您可以使用PHP检查它:
if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
// Ajax Request
}
答案 1 :(得分:2)
我想最好在AJAX调用中设置一个请求标头,例如
st.setRequestHeader('X-Sent-From','default.html')
然后在content.php中,
$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
答案 2 :(得分:1)
答案 3 :(得分:0)
无法简单地检测到请求来自服务器上的AJAX调用。但是,您可以添加一个参数,该参数在通过AJAX请求时发送,表明它来自ajax调用。
例如:
/*more code above*/
var PHP_URL = "content.php?mode=AJAX";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
如果只是检测到来自default.html的调用就足够了(并且无法区分AJAX调用或单击的链接),那么检查Referrer标题就可以了,正如@Jamie Wong建议的那样。