Отслеживание исходящих ссылок с помощью Javascript и PHP - PullRequest
1 голос
/ 16 января 2010

Я пробовал использовать 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 ]

7 голосов
/ 16 января 2010

Чтобы получить наилучшие результаты, вы должны изменить две вещи в своем подходе

  1. Используйте onmousedown вместо click - таким образом, у вас есть несколько дополнительных миллисекунд для выполнения запроса на отслеживание, иначе браузер может вообще не устанавливать соединение с вашим трекером, поскольку он уже перемещается от исходной страницы , Недостатком является то, что вы можете получить некоторые ложноположительные значения, поскольку пользователь, нажимающий кнопку, может не завершить щелчок (например, удерживает кнопку мыши нажатой и перемещает курсор от ссылки), но в целом это жертва, которую вы должны быть готовы сделать - учитывая лучшее качество отслеживания.
  2. Вместо вызова Ajax ($.post('...')) используйте средство предварительной выборки изображений (new Image().src='...'). Тот факт, что трекер не является изображением, в данном случае не имеет значения, потому что вы все равно не хотите использовать получающееся «изображение», вы просто хотите сделать запрос к серверу. Ajax-вызов - это двустороннее соединение, поэтому оно занимает немного больше времени и может завершиться неудачей, если браузер уже уходит, но средство предварительной выборки изображений просто отправляет запрос на сервер, и на самом деле не имеет значения, возвращаете ли вы что-либо или нет.

Так что решение будет примерно таким:

<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>
2 голосов
/ 16 января 2010

Вместо использования JavaScript для вызова сценария отслеживания php, вы можете просто напрямую связать свой сценарий отслеживания, и он, в свою очередь, перенаправит ответ в конечный пункт назначения, что-то вроде этого:

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

и в скрипте PHP после выполнения отслеживания:

...
header("Location: $dest");
1 голос
/ 16 января 2010

Как уже упоминалось, проблема в том, что вы не запускаете скрипт после загрузки 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

...