【问题标题】:Get current page name with PHP and jQuery AJAX使用 PHP 和 jQuery AJAX 获取当前页面名称
【发布时间】:2014-04-27 10:36:50
【问题描述】:

我想记录网站访问者的引荐来源网址和登录页面。这是基本设置:

在我的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 代码的选项并不是我真正想要的方法。

【问题讨论】:

    标签: php ajax http-referer request-uri


    【解决方案1】:

    您是在呼应 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'];
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      您可以在javascript中访问当前页面引用:

      document.referrer
      

      这是因为您的主页没有使用 php。如果您使用的是 php,则可以在页面加载时捕获它。

      【讨论】:

        【解决方案3】:

        Referrer(如果支持)通常是调用相关页面的页面。在您的情况下,您的 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";
        }
        

        【讨论】:

        • 谢谢 Aleks G。我明白这一点。查看我的更新,了解我的目标,我可能解释得不够好。
        • @user2074704 在这种情况下,请参阅 lagbox 的答案。您可以直接在 Javascript 中获取信息。阅读有关document 对象的文档。
        猜你喜欢
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 2016-12-18
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        相关资源
        最近更新 更多