使用Javascript和PHP跟踪传出链接

时间:2010-01-16 15:27:12

标签: javascript php jquery click

我已经尝试过使用jQuery,但它无法正常工作。

<script>
    $("a").click(function () { 
      $.post("http://www.example.com/trackol.php", {result: "click"
  }, "html");
    });
</script>
<a href="http://www.google.com">out</a>

3 个答案:

答案 0 :(得分:7)

为了获得最佳效果,您应该改变方法中的两件事

  1. 使用onmousedown代替click - 这样您就可以获得额外的毫秒数来完成跟踪请求,否则浏览器可能根本无法启动与智能设备的连接,因为它已经导航从原始页面。缺点是你可能得到一些假阳性计数,因为点击用户可能没有完成点击(例如,保持鼠标按钮并将光标移离链接)但总的来说这是你应该愿意牺牲的 - 考虑到更好的跟踪质量。
  2. 使用图像预取器($.post('...'))代替Ajax调用(new Image().src='...')。在这种情况下跟踪器不是图像的事实并不相关,因为您不想使用生成的“图像”,您只想向服务器发出请求。 Ajax调用是一种双向连接,因此如果浏览器已经导航,但是它需要花费更多的时间并且可能会失败但是图像预取器只是将请求发送到服务器,如果你得到回复或不
  3. 所以解决方案是这样的:

    <script>
    $(document).ready(function() {
        $("a").mousedown(function (){
            new Image().src= "http://www.example.com/trackol.php?result=click";
        });
    });
    </script>
    
    <a href="http://www.google.com">out</a>
    

答案 1 :(得分:2)

您可以直接链接到跟踪脚本,然后将响应重定向到最终目标,而不是使用JavaScript来调用php跟踪脚本,如下所示:

<a href="http://www.example.com/trackol.php?dest=http://www.google.com">out</a>

并在PHP脚本中执行跟踪后:

...
header("Location: $dest");

答案 2 :(得分:1)

如前所述,问题是您在加载DOM后没有运行脚本。您可以通过将jQuery脚本包装在$(function() { }中来解决此问题,如下所示:

这有效:

<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Tracking outgoing links with JavaScript and PHP</title>
 </head>
 <body>
  <p><a href="http://www.google.com/">Test link to Google</a></p>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script>
   $(function() {
    $('a').click(function() {
     $.post('http://www.example.com/trackol.php', { result: 'click' }, 'html');
    });
   });
  </script>
 </body>
</html>

在此处查看此行动:http://jsbin.com/imomo3