2

我正在尝试以类似于以下的方法在我的网站上单击链接时跟踪事件。

<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 请求的结果......我只是希望它通过事件发生的事实来 ping 服务器。

(另外,我希望我会得到至少一个答案,说只是从服务器端而不是客户端跟踪新页面加载。这不是这个问题的可接受答案。我正在寻找类似的东西trackPageview无论是否加载新页面,Google Analytics 的功能都适用于锚标记的点击事件。)

4

2 回答 2

3

通过像 Charles 这样的代理运行 Google 的trackPageview方法表明,trackPageview( )从 Google 的服务器请求像素的调用具有各种参数集,这是大多数分析包最终实现此类功能的方式(Omniture 也是如此)。

基本上,为了解决未完成的异步请求,他们让客户端请求图像并在服务器端处理这些请求中传递的参数。

最后,您需要实现同样的事情:编写一个实用程序方法,从您的服务器请求图像,通过 URL 参数传递您感兴趣的信息(类似于 /track.gif?page=foo. html&link=点击%20Me&bar=baz); 然后服务器会将这些参数记录在数据库中并发送回 gif。

之后,它只是对您收集的数据进行切片和切块以生成报告。

于 2010-07-09T16:07:46.713 回答
1

马特,

如果您只想确保发出跟踪像素请求并且不依赖响应,那么只需为跟踪像素图像执行 document.write 即可。

您可以在 onclick 处理程序中执行 document.write。

锚元素的 href 和 onclick 处理程序之间的 AFA 竞争条件涉及到定义良好的顺序。

首先执行事件处理程序脚本,然后执行默认操作(在这种情况下,默认处理程序是 href)(来源:Href 和锚链接中的 onclick 问题

但是,是的,如果您依赖于对服务器的跟踪请求的响应,那么您将不得不使其同步。

建议的选项是调用一些 javascript 函数来包装已经定义的 onclick 处理程序,然后按顺序进行调用。确保您的跟踪请求不是异步的。

尽管建议您不要依赖于跟踪像素请求的响应。

于 2011-01-25T08:34:05.783 回答