检测Ajax调用URL

时间:2010-06-26 16:39:06

标签: php javascript html ajax

我有一个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'调用的,还是根据需要调用了不同的调用文档?

4 个答案:

答案 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)

$_SERVER['HTTP_REFERER']可能就是您想要的

参考

答案 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建议的那样。