2010-07-09 3 views
2

Я пытаюсь отслеживать события, когда ссылки нажимаются на моем сайте по методу, подобному следующему.AJAX GET состояние гонки?

<a href="/example" class="track">Example</a> 

<script type="text/javascript"> 
    jQuery(function($) { 
     // track clicks on all anchor tags that require it 
     $('a.track').live('click', function(e) { 
      // send an AJAX request to our event tracking URL for the server to track it 
      $.get('/events/track', { 
        url: $(this).attr('href'), 
        text: $(this).text() 
      }); 
     }); 
    }); 
</script> 

Проблема, что у меня в том, что при загрузке новой страницы прерывает запрос AJAX, и поэтому иногда эти события не отслеживаются. Я знаю, что у Google Analytics есть функция _trackPageview, которая может быть привязана к событиям onclick, хотя это и не похоже на проблему. Мне интересно, что отличает их вызов от моего, что я вижу это состояние гонки, а GA нет. например .:

<a href="/example" onclick="javascript:pageTracker._trackPageview('/click/example');">Example</a> 

Обратите внимание, что я не беспокоюсь о результате запроса AJAX ... Я просто хочу, чтобы свистеть сервер с тем, что это событие произошло.

(Кроме того, я ожидаю, что я получу хотя бы один ответ, который попросит просто отслеживать загрузку новой страницы со стороны сервера, а не с клиентской стороны. Это не приемлемый ответ на этот вопрос. ищет что-то вроде как trackPageview функция Google Analytics' работает на события нажатия якорных тегов независимо новая страница загружается.)

ответ

3

Запуск метода от Google trackPageview через прокси-сервер, как Чарльз показывает, что звонки на trackPageview() запроса Пиксель от Серверы Google с различными параметрами установлены, так как большинство пакетов аналитики завершают реализацию таких функциональных возможностей (Omniture делает то же самое).

В принципе, чтобы обойти несинхронные запросы, которые не выполняются, у них есть запрос клиента на изображение и хруст параметров, переданных в этих запросах на стороне сервера.

В конце концов, вам нужно реализовать ту же самую вещь: напишите метод утилиты, который запрашивает изображение с вашего сервера, передавая интересующую вас информацию через параметры URL (что-то вроде /track.gif? page = foo.html & link = Click% 20Me & bar = baz); сервер будет регистрировать эти параметры в базе данных и отправлять обратно gif.

После этого, это просто нарезка и обработка данных, которые вы собрали для создания отчетов.

+0

Как это предотвращает состояние гонки? Является ли пиксель загружен не-AJAX? Например, загружается ли она на страницу в теге изображения через 'document.write'? Или объект Javascript Image() используется аналогично тому, как предварительно загружать изображения для опрокидывания раньше, чем днем? Я просто хочу убедиться, что я правильно реализую это, чтобы у меня не было такого же гоночного состояния, которое происходит по-новому. Благодаря! :) –

+0

Ну, по сути, работа выполняется на стороне сервера. Единственная ответственность клиента заключается в отправке запроса; он может вставить изображение на страницу, если это необходимо, но реальное действие ударяет по серверу и позволяет серверу записывать то, что было отправлено ему. В этом случае вы можете создать новое изображение, отправить запрос Ajax, загрузить скрипт и т. Д., Пока вы делаете запрос на сервер. – ajm

+0

Хорошо, что возвращает меня к моей проблеме в первую очередь. Я делаю запрос на получение AJAX, но иногда он не доходит до сервера до того, как загружается запрошенная страница на ярлыке привязки. Как я могу гарантировать, что загрузка изображения не будет иметь одинаковую проблему? –

1

Matt,

Если вы просто хотите, чтобы убедиться, что запрос на пиксель отслеживания сделано и не зависят от ответа, то просто делает document.write для отслеживания пикселя изображения будет делать свою работу.

И вы можете сделать document.write в своем обработчике onclick.

Состояние гонки AFA между обработчиком href и onclick анкерного элемента касается порядка, который четко определен.

скрипт обработчика событий выполняются первым действие по умолчанию происходит после этого (в этом случае обработчик по умолчанию является HREF) (Источник: Href and onclick issue in anchor link)

Но да, если вы зависите от реакции слежения запрос на сервер, тогда вам придется сделать его синхронным.

Предполагаемый вариант заключается в вызове некоторой функции javascript для обертки уже определенных обработчиков onclick, а затем в порядке выполнения вызовов. Убедитесь, что ваш запрос отслеживания не является асинхронным.

Хотя предполагается, что вы не должны зависеть от ответа на запрос пикселя отслеживания.

Смежные вопросы