AJAX GET竞争条件?

我试图通过类似于以下方法在我的网站上点击链接时跟踪事件。

Example  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() }); }); });  

我遇到的问题是新页面加载会中断AJAX请求,因此有时这些事件不会被跟踪。 我知道谷歌分析有一个_trackPageviewfunction,可以附加到onclick事件,但这似乎不是一个问题。 我想知道他们的电话与我的看法有什么不同,我看到这种竞争条件,GA不是。 例如:

 Example 

请注意,我并不担心AJAX请求的结果……我只是想让它以发生事件的事实来ping服务器。

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

通过像Charles这样的代理运行Google的trackPageview方法,显示对trackPageview( )调用请求设置了各种参数的Google服务器的像素,这就是大多数分析软件包最终实现这些function的方式(Omniture也是如此)。

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

为此,您需要实现相同的function:编写一个实用程序方法,从服务器请求图像,通过URL参数传递您感兴趣的信息(类似于/track.gif?page=foo。 HTML&链接=点击%20Me&条=巴兹); 然后,服务器将在数据库中记录这些参数并发送回gif。

在那之后,它只是切割和切割您收集的数据以生成报告。

马特,

如果您只是想确保跟踪像素请求已经完成并且您不依赖于响应,则只需对跟踪像素图像执行document.write即可完成工作。

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

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

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

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

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

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