为什么Google Analytics事件不会从onSubmit发送?

4
我想使用Analytics事件跟踪用户下载文件的频率,但是尽管似乎已经发送了事件,但跟踪 .gif 文件似乎没有正确到达。
用户需要填写简短的表格才能下载文件。该表格中输入的信息将由函数checkSubmit()检查(当输入信息无效或不完整时返回false,当信息有效时返回true)。一旦提交,用户将被重定向到文件所在页面。
<script>
function checkSubmit() {
    …
    if(dataIsGood) {
        _gaq.push(['_trackEvent', 'Download', 'the_filename.xxx']);
        return true;    //allow the form to submit
    } else {
        _gaq.push(['_trackEvent', 'Form', 'info not okay']);
        return false;   //keep the form from being submitted
    }
}
</script>

<form action="/form/emailcaptureform" method="post" onSubmit="return checkSubmit();"></form>

在Chrome控制台中,Google Analytics跟踪调试器显示下载事件跟踪信标已发送,但控制台显示无法加载资源__utm.gif
这种情况仅在提交表单之前推送的事件中发生。在我的网站上,其他地方的事件都能正常工作,包括当表单信息不正确时推送的表单事件(在上面的else块中)。 分析代码段似乎正在工作,接受_trackPageview_trackEvent__utm.gif的请求URL格式正确:从gadebug输出中复制并粘贴URL到地址栏中可以顺利返回__utm.gif。
当从另一个元素推送事件时,事件可以顺利推送。例如:
<a href="#" onClick="_gaq.push(['_trackEvent', 'Download', the_filename.xxx']);">Event!</a>

推送事件,暂停几秒钟,然后返回true似乎没有任何效果——除了在提交表单之前添加一个暂停。

您有解决方案或建议吗?


似乎在<form>提交和Analytics处理事件之间存在冲突:事件未注册,因为它需要进行成功的GET请求,而这个GET请求被<form>的POST请求中断了。有什么解决这个冲突的想法吗? - lucasrizoli
解决请求冲突的方法有两种:1)异步提交表单数据;2)在表单上中断提交事件,等待GA事件处理完成后再允许表单提交。 - lucasrizoli
1个回答

4
JavaScript 是单线程的。当你执行 _gaq.push 时,你正在将某些内容推入队列中以便稍后处理。但是,在“稍后”到来之前,你的代码返回了true,因此 GA 代码永远不会得到执行(因为下一步操作是去下一页)。
我建议,在这种情况下可以使用传统或同步跟踪,使用._trackEvent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接