我正在创建一个网站,其中主要内容由Ajax调用更改,我想添加Google Analytics代码(使用async _gaq方法)。 我知道我需要将带有URI的_trackPageview事件推送到_gaq。我有两种方法可以做到这一点:
1)在我的链接和表单上使用onclick属性(或用JQuery绑定事件),例如:onlink =“_ gaq.push(....)”
2)由于我的ajax代码在从ajax请求接收数据时可以处理脚本,因此我可以在提供ajaxed页面时在这样的脚本片段中添加_gaq.push(...)调用。
使用第一个选项,我猜想会产生更清晰,更简洁的代码。但是,缺点是我必须记住放入所有链接并形成分析代码,如果我在带有JS验证的表单上使用它,即使验证失败,也会通过GA分析点击。
第二种选择似乎不太干净,但解决了上述问题。我可以有一个GA代码,只检查我们是否正在服务ajax或普通页面并相应地输出JS片段。此外,只有在真正提交表单时才会记录表单提交。
我将不胜感激任何想法或意见。也许有更多的考虑因素或方法可以做到这一点?
由于 亚龙
答案 0 :(得分:4)
如果您使用jQuery,有一些更聪明的方法可以做到这一点。
一种可能性是绑定到事件ajaxSuccess
$(document).ajaxSuccess(function(e, xhr, opt){
_gaq.push(['_trackPageview', opt.url]);
});
然后从那里开始,所有jQuery ajax调用都会触发此事件,它会将您通过Ajax请求的url推送到_gaq
。
请记住,它会按照您的要求推送网址。所以如果你打电话:
$.ajax('http://www.mydomain.com/path')
http://www.mydomain.com/path
将被推送到_gaq。可能那不是你想要的。所以最好像这样调用.ajax
:
$.ajax('/path');
现在只有/path
被推送到_gaq。
如果您确实需要使用整个域名,那么在将其推送到Google Analytics之前清理该网址是一个好主意。
答案 1 :(得分:1)
我将此作为新答案发布,因为这是一种不同的方法。
如果您不想绑定到全局事件ajaxSucess
,可以使用延迟手动执行此操作。
$.ajax('/page').done(function(){
_gaq.push(['_trackPageview', '/page']);
}).done(function(response){
// Do something with the response
});
糟糕的是完成的回调没有收到url。所以你将两次输入网址。既然你可能要做几次,那么创建辅助函数可能很方便:
function GaAjax(url){
return (function(u){
return $.ajax(u).done(function(){
_gaq.push(['_trackPageview', u]);
});
})(url);
}
现在,当您正在执行应发送给Google Analytics的Ajax请求时,您可以调用它而不是jQuery .ajax
。
GaAjax('/page').done(function(){
// Do something with the response
});