使用GET而不是POST
进入一个问题,我需要在窗体方法上使用GET和POST,但是GATC cookie数据没有被正确地附加到URL上,因为表单的数据在使用Google的GATC数据(使用linkByPost)。
我已经阅读了这里发布的一个可能的解决方案,但似乎是让GET表现出疯狂的工作量。 我也在这里偶然发现了另一个解决方案,但是IE在URL的'anchor'部分之后并不尊重任何东西。
任何人有任何其他想法? 如果我不能通过JS处理这个问题,我将不得不进入处理表单动作的脚本,并手动处理查询字符串(假设GATC数据位于$ _REQUEST数组中)。 当使用get时,FTR,GATC数据不能通过$ _REQUEST数组获得。
为了将来的参考,如果有人遇到同样的问题,这是我实施的解决方案。 我从这篇SO帖子的答案中解除了一些代码,并将其与这篇文章背后的想法结合起来,在这篇文章中它将GATC数据本地化,并为每个表单添加隐藏字段。
结果代码:
$(document).ready(function() {
$('#formId').submit(function(e) {
try {
e.preventDefault();
var form = this;
if (typeof _gat !== 'undefined') {
_gaq.push(['_linkByPost', this]);
var pageTracker = _gat._getTrackerByName();
var url = pageTracker._getLinkerUrl(form.action);
var match = url.match(/[^=&?]+s*=s*[^&#]*/g);
for ( var i = match.length; i--; ) {
var spl = match[i].split("=");
var name = spl[0].replace("[]", "");
var value = spl[1];
$('<input>').attr({
type: 'hidden',
name: name,
value: value
}).appendTo(form);
}
}
setTimeout(function() { form.submit(); }, 400);
} catch (e) { form.submit(); }
});
});
您可以使用jQuery序列化来获取表单的元素,然后使用_getLinkerUrl
来追加跨域跟踪数据
$('#formID').submit(function(e) {
var pageTracker = _gat._getTrackerByName();
var url = this.action + '?' + $(this).serialize();
url = pageTracker._getLinkerUrl(url);
if (this.target != '_blank') location.href = url;
else window.open(url);
});
链接地址: http://www.djcxy.com/p/83487.html
上一篇: Using GET instead of POST
下一篇: Submitting a form (post, NOT ajax) with some additional parameters