2012-03-22 24 views
8

我有一个通过Ajax加载其他页面的页面(认为框架,除了没有框架)。如何判断一个页面是通过Ajax调用,还是通过它自己调用

显然这些页面都可以独立调用,所以我想检测它们是否通过Ajax调用,如果不是,则重定向到主Ajax页面。

页面是php页面,所以我也可以访问它。

指数:

goto = "StandalonePrograms.php"; 
    var clear = "<br style='clear:both;'>" 
    if(goto != ''){ 
     $.ajax({ 
      url: goto, 
      context: document.body, 
      success: function(data){ 
       $('#mainwindow').html(data + clear); 
       $('#mainwindow').find("script").each(function(i){ 
        eval($(this).text()); 
       }); 
      } 
     }); 
    } 
+0

http://stackoverflow.com/questions/3696650/how-to-detect-if-file-is-being-accessed-or-requested查看选定的答案 – 2012-03-22 18:38:26

+0

有AJAX请求用特殊的查询字符串调用页面。这不是万无一失的,但它可能够好。 – Blazemonger 2012-03-22 18:39:26

+0

可能的重复[如何检查请求是否通过AJAX与PHP?](http://stackoverflow.com/questions/4301150/how-do-i-check-if-the-request-is-made -via-ajax-with-php) – 2012-03-22 18:39:51

回答

12

现代浏览器添加下列请求头时,请求使用XMLHttpRequest对象所做:

X-Requested-With: XMLHttpRequest 

在PHP中,使用检查此标头是否存在:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
+3

对于PHP,您可以检查'$ _SERVER ['HTTP_X_REQUESTED_WITH']'。 – 2012-03-22 18:39:43

+0

这不适用于PHP 7.1.11以及最新的Chrome浏览器,截至1月18日 – Mawg 2018-01-06 13:19:23

-1

你永远不能相信客户和他们发送的信息ormation! 头文件可能被黑客欺骗(例如使用cURL),甚至HTTP_X_REQUESTED_WITH也不可靠。没有100%可信的方式来知道这一点。 唯一的方法是使用验证码...