AJAX ПОЛУЧИТЬ состояние гонки? - PullRequest
2 голосов
/ 09 июля 2010

Я пытаюсь отследить события, когда ссылки нажимаются на моем сайте, следующим образом:

<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 работает с событием нажатия тегов привязки независимо от загружаемой новой страницы.)

Ответы [ 2 ]

3 голосов
/ 09 июля 2010

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

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

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

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

1 голос
/ 25 января 2011

Матовый,

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

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

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

скрипт обработчика событий выполняется первым действие по умолчанию происходит позже (в этом случае обработчиком по умолчанию является href) (Источник: Href и onclick проблема в ссылке привязки )

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...