1

遇到一个问题,我需要在表单方法上使用 GET 与 POST,但 GATC cookie 数据未正确附加到 URL,因为表单的数据胜过 Google 的 GATC 数据(使用 linkByPost)。

我已经阅读了此处发布的潜在解决方案,但似乎需要大量工作才能使 GET 正常运行。我在这里也偶然发现了另一个解决方案,但是 IE 在 url 的“锚”部分之后不尊重任何内容。

有人有其他想法吗?如果我不能通过 JS 处理这个问题,我将不得不进入处理表单操作的脚本并手动按摩查询字符串(假设 GATC 数据在 $_REQUEST 数组中)。FTR、GATC 数据在使用 get 时无法通过 $_REQUEST 数组获得。

4

2 回答 2

2

为了将来参考,如果有人遇到同样的问题,这是我实施的解决方案。我从这个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(); }
    });
});
于 2013-03-27T23:43:23.130 回答
0

您可以使用 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);
});
于 2013-03-28T14:15:45.957 回答