Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检测Ajax调用URL_Php_Javascript_Html_Ajax - Fatal编程技术网

Php 检测Ajax调用URL

Php 检测Ajax调用URL,php,javascript,html,ajax,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() {

我有一个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*/
/*以上更多代码*/
var PHP_URL=“content.PHP”;
var Content=document.getElementById('Content');
ajaxRequest=新的XMLHttpRequest();
ajaxRequest.onreadystatechange=
函数(){
if(ajaxRequest.readyState==4){
if(ajaxRequest.status==200)
Content.innerHTML=ajaxRequest.responseText;
其他的
Content.innerHTML=“错误:
无法在“+PHP_URL+”加载页面; Content.className=“内容实体”; } } 打开(“GET”,PHP_URL,true); ajaxRequest.send(); /*下面有更多代码*/

位于“content.php”的文件是否可能检测到它已从“default.html”调用,或根据需要从其他调用文档调用?

$\u服务器['HTTP\u REFERER']
可能是您想要的

参考文献


不可能简单地检测来自服务器上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*/
/*以上更多代码*/
var PHP_URL=“content.PHP?mode=AJAX”;
var Content=document.getElementById('Content');
ajaxRequest=新的XMLHttpRequest();
ajaxRequest.onreadystatechange=
函数(){
if(ajaxRequest.readyState==4){
if(ajaxRequest.status==200)
Content.innerHTML=ajaxRequest.responseText;
其他的
Content.innerHTML=“错误:
无法在“+PHP_URL+”加载页面; Content.className=“内容实体”; } } 打开(“GET”,PHP_URL,true); ajaxRequest.send(); /*下面有更多代码*/

如果仅仅检测来自default.html的调用就足够了(并且不区分AJAX调用或单击的链接),那么检查referer头就可以了,正如@Jamie Wong所建议的那样。

我想最好是在AJAX调用中设置请求头,例如

st.setRequestHeader('X-Sent-From','default.html')
然后在content.php中

$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html

大多数著名的Ajax框架,如jQuery和mooTools,都会添加一个特定的头文件,您可以使用PHP进行检查:

if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
    // Ajax Request
}

您不能依赖HTTP_REFERER总是被填充。同意-但我能想到的唯一其他替代方法是生成存储在会话中的唯一哈希,并将其包含在AJAX请求中,然后检查用户的会话以查看其来源。这有点难看,可能有点过头了。我没有想到——在jQuery中,您会使用
beforeSend
回调来实现这一点,还是有更简单的方法呢?我经常使用jQuery,但不用于AJAX调用。然而,据我所知,我会在发送前使用