我想记录网站访问者的引荐和登录页面。这是基本设置:
在我的index.html
文件中,我包含了我的javascript文件:<script src="js/log.js"></script>
。
从这里我使用AJAX调用PHP文件来获取引用和登录页面,如下所示:
$.ajax({
type: "post",
url: 'php/functions.php',
data: 'request_type=get_page_info',
success: function (data) {
console.log('DATA: '+data);
}
});
在我的PHP functions.php
文件中,我返回引用和登录页面,如下所示:
if( isset($_POST['request_type']) && $_POST['request_type'] == 'get_page_info'){
echo 'The referer is: '.$_SERVER['HTTP_REFERER'].' and
the landing page is: '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
一切都相当简单。说我从stackoverflow.com来到这个网站我希望AJAX成功函数中的数据看起来像:
参考者是:www.stackoverflow.com和 登陆页面是:www.mysite.com/index.html
然而,相反,我得到了这个:
参考者是:www.mysite.com/index.html和 登陆页面是:www.mysite.com/php/functions.php
我在哪里错了?
提前致谢。
更新
我尝试这种方法的原因是因为这个小例子是一个大型项目的一部分,该项目旨在成为各种插件。为了方便用户集成到他们的网站,我希望他们能够将javascript文件包含在他们的页面标题中。因此,将index.html
更改为index.php
并仅添加php代码的选项并不是我正在寻找的方法。
答案 0 :(得分:0)
您正在回应ajax呼叫本身的引用者,而不是您的目标网页。
由于HTTP是无状态的,因此无法通过Ajax调用获取这些信息而不将其存储在某处,因此您需要将以下代码放在www.mysite.com/index.html
中并删除ajax调用:
<?php
if( isset($_POST['request_type']) && $_POST['request_type'] == 'get_page_info'){
echo 'The referer is: '.$_SERVER['HTTP_REFERER'].' and the landing page is: '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
?>
答案 1 :(得分:0)
您可以在javascript中访问当前页面引荐来源:
document.referrer
这是因为您没有在主页上使用php。如果您使用的是php,则可以在页面加载时捕获它。
答案 2 :(得分:0)
推荐人,在支持时,通常是调用相关页面的页面。在您的情况下,functions.php
会从index.php
(通过AJAX)调用,因此您将引荐来源设为index.php
,将自己的网页设为functions.php
。从服务器的角度来看,它不是一个页面而是两个被请求的单独页面 - 它对AJAX或任何其他请求页面的方法一无所知。
您想要做的事情根本不需要任何ajax - 您只需要将代码用于将引用者放入主index.php
文件中。如果(出于任何奇怪的原因)你需要在javascript中使用这个信息,你可以从你的php文件生成javascript:
if( isset($_POST['request_type']) && $_POST['request_type'] == 'get_page_info'){
echo "<script type='text/javascript'>\n;
echo " var referer = '" . $_SERVER['HTTP_REFERER'] . ";\n";
echo " var landing = '" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . ";\n";
echo "</script>\n";
}