javascript form.submit()丢失由GA _linkByPost创建的查询字符串

时间:2012-06-28 12:10:11

标签: javascript forms post query-string

我们有一个预约表格,邮寄到母公司网站。由于这是一个不同的域名,我们需要实施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

在文档准备中包装方法调用没有帮助。我很困惑为什么动作URL在警报中显示后是正确的,但如果我没有提醒它就不正确。

2 个答案:

答案 0 :(得分:0)

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

我正在关闭/接受这一点,因为看似在GA通话后过快地提交表单。

答案 1 :(得分:0)

为后代回答这个问题。

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

解决方案是将一个函数推送到提交表单的_gaq对象上,以便在完成表单修改后直接发生。

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