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

标签 javascript forms google-analytics form-submit

我想跟踪用户使用 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 Tracking Debugger显示已发送下载事件跟踪信标,但控制台显示它无法加载资源 __utm.gif

这种情况在提交表单之前推送的事件事件在我网站的其他地方工作——包括当表单信息不正确时推送的表单事件(在上面的 else block 中)

Analytics snippet似乎在工作,接受 _trackPageview_trackEvent

__utm.gif 的请求 URL 格式正确:将 gadebug 输出中的 URL 复制并粘贴到地址栏中会顺利返回 __utm.gif。

当从另一个元素推送时,事件被毫无问题地推送。例如:

<a href="#" onClick="_gaq.push(['_trackEvent', 'Download', the_filename.xxx']);">Event!</a>

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

您有解决方案或建议吗?

最佳答案

Javascript 是单线程的。当您执行 _gaq.push 时,您正在将某些内容推送到队列中以供稍后处理。但是,您的代码在“稍后”到来之前返回 true,并且 GA 代码永远不会执行(因为下一个操作是转到下一页)。

我建议现在可能是对 ._trackEvent 使用传统或同步跟踪的合适时机。

关于javascript - 为什么不从 onSubmit 发送 Google Analytics 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939090/

相关文章:

html - 记录/识别来自特定事件的访问者

python - 谷歌API : Understanding redirect URI

php - 带有第一方 Cookie 的 Google Analytics

javascript - 将不同 DIV 中的数字相加

javascript - JS document.getElementById() 与 Int

python - 'csrf_tokan',预期为 'endblock' 。您是否忘记注册或加载此标签?

asp.net-mvc - ASP.NET MVC 3 多个模型到单个表单

javascript - 如何从另一个对象内的函数内使用 this 引用顶级对象

javascript - React Hooks 表单 : undefined values on submit

forms - symfony2 在表单中使用验证组