我试图通过类似于以下方法在我的网站上点击链接时跟踪事件。
<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不是。 e.g:
<a href="/example" onclick="javascript:pageTracker._trackPageview('/click/example');">Example</a>
请注意,我并不担心AJAX请求的结果......我只是希望它能够通过发生事件来ping服务器。
(另外,我希望我能得到至少一个答案,说明只是从服务器端跟踪新的页面加载,而不是客户端。这不是这个问题的可接受的答案。我我正在寻找像谷歌分析'trackPageview
函数如何在锚点标记的点击事件上工作的东西,无论是否加载新页面。)
答案 0 :(得分:3)
通过像查尔斯这样的代理运行Google的trackPageview
方法,显示调用trackPageview( )
请求设置了各种参数的Google服务器的像素,这就是大多数分析软件包最终实现这些功能的方法( Omniture做同样的事情。)
基本上,为了避免异步请求未完成,他们让客户端请求图像并在服务器端处理这些请求中传递的参数。
为此,您需要实现相同的功能:编写一个实用程序方法,从您的服务器请求图像,通过URL参数传递您感兴趣的信息(类似于/track.gif?page = foo.html&安培;链接=点击%20Me&安培;巴=巴兹);然后,服务器将在数据库中记录这些参数并发送回gif。
之后,它只是切割和切割您收集的数据以生成报告。
答案 1 :(得分:1)
马特,
如果您只是想确保跟踪像素请求已经完成并且您不依赖于响应,那么只需为跟踪像素图像执行document.write即可完成工作。
你可以在onclick处理程序中执行document.write。
锚点元素的href和onclick处理程序之间的AFA竞争条件与订单的定义有关。
首先执行事件处理程序脚本 之后发生默认操作(在这种情况下,默认处理程序是href) (来源:Href and onclick issue in anchor link)
但是,是的,如果您依赖于跟踪请求对服务器的响应,那么您必须使其同步。
建议的选项是调用一些javascript函数来包装已定义的onclick处理程序,然后按顺序进行调用。确保您的跟踪请求不是异步的。
虽然建议您不要依赖于跟踪像素请求的响应。