【问题标题】:javascript form.submit() losing querystring created by GA _linkByPostjavascript form.submit() 丢失由 GA _linkByPost 创建的查询字符串
【发布时间】:2012-06-28 12:10:11
【问题描述】:

我们有一个发布到母公司网站的预订表格。因为这是一个不同的域,我们需要实现 GA _linkByPost 以跨域传递 GA 跟踪 cookie 信息。

由于预订表单位于 .NET 用户控件中,因此它会进行回发。在回发时,我们验证、包装预订信息,并将包含目标预订引擎所需的隐藏元素的表单写回客户端,并添加一行 javascript 以提交表单。

下面是我用来提交表单的 javascript 函数:

function postBookingForm() {
  var thisForm = document.getElementById('PostForm');
  _gaq.push(['_linkByPost', thisForm]);
  thisForm.submit();
}

以及相关的表单信息:

<form id="PostForm" name="PostForm" action="ClientBookingEngineUrl" method="post" >
    booking form info in here
</form>

结果是我们填写表单,点击提交,它会往返于服务器生成一个新表单并发布信息。除了 URL 丢失了查询字符串中的 GA cookie 信息之外,这一切都很好。如果我注释掉表单提交行并查看源代码,我可以在查询字符串上看到 GA cookie 信息 - 但是在发布时,我看不到查询字符串(使用 Fiddler)。

澄清: 上述技术在将表单数据发布到预订引擎并将用户带到那里时,可以正常工作并完成我们想要的操作。 如果提交行被注释掉,您可以看到带有修改后的操作的表单,其中附加了 GA 内容(使用 Firebug)。 如果表单使用提交行提交,则查询字符串信息将被删除(由 Fiddler 确认)。

我是否遗漏了一些明显的东西?是否有一些关于 JS 提交、表单 POST 和查询字符串的问题?还是我缺少一个简单的技巧?

干杯

编辑 1

发生了奇怪的事情。

如果我在 _gaqPush 之前和之后提醒表单操作,那么我们可以看到 URL 处于之前和之后的状态,并且符合预期。

alert('1 form action = ' + thisForm.action);
_gaq.push(['_linkByPost', thisForm]);
alert('2 form action = ' + thisForm.action);

警报 1 显示预先修改的操作,警报 2 显示带有 GA 信息的操作。 有了警报,它会在查询字符串中提交 GA 信息。 如果我注释掉警报,则 GA 信息不在查询字符串中...

我开始认为表单或其他东西还没有准备好,所以我正在尝试准备好 JQuery 的文档。

编辑 2

将方法调用包装在 document ready 中并没有帮助。我很困惑为什么操作 URL 在警报中显示后是正确的,但如果我不发出警报则不正确。

【问题讨论】:

  • 感谢您的错字更正。我知道松散和失去诚实之间的区别。我把它归咎于压力:)

标签: javascript forms post query-string


【解决方案1】:

为后代回答这个问题。

问题是 _qaq(Google Analytics 队列)在调用 submit() 表单之前没有时间修改表单。

解决方案是在提交表单的 _gaq 对象上推送一个函数,这样它就会在表单修改完成后直接发生。

function postBookingForm() {
    var thisForm = document.getElementById('PostForm');
    _gaq.push(['_linkByPost', thisForm]);
    _gaq.push(function() { thisForm.submit(); });
}

【讨论】:

  • 这是否意味着我可以使用它而不是延迟?
  • 这是正确的 - 这将正确运行而无需使用延迟或超时功能,因为推送到队列中的所有内容都按照它们被推送的顺序依次运行,一次一个。所以提交是在修改表单之后发生的。
【解决方案2】:

我尝试了一个简单的 HTML 页面,它调用 _gaqPush 并立即提交。这也失败了。 添加 1000 毫秒的延迟(大部分情况下)是有效的,所以我怀疑警报只是给了 GA 脚本时间来修改表单。

我正在关闭/接受这一点,因为在 GA 电话会议之后提交表单的速度似乎过快。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2021-12-23
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多