使用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