2013-03-27 12 views
1

存在一個問題,我需要在表單方法上使用GET和POST,但GATC Cookie數據沒有正確地附加到URL上,因爲表單的數據超過了Google的GATC數據(使用linkByPost)。Google Analytics(分析) - 使用GET而不是POST

我已經閱讀了發佈在here上的潛在解決方案,但似乎是讓大量GET工作的工作。我也偶然發現了另一個解決方案here,但IE瀏覽器並沒有尊重url的'anchor'部分。

任何人有任何其他想法?如果我不能通過JS處理這個問題,我將不得不進入處理表單動作的腳本,並手動處理查詢字符串(假設GATC數據位於$ _REQUEST數組中)。當使用get時,FTR,GATC數據不能通過$ _REQUEST數組獲得。

+0

嘗試使用[這些方法之一] (http://stackoverflow.com/questions/316781/how-to-build-query-string-with-javascript)來獲取你的表單的查詢字符串並使用'_link()'。 – nwellnhof 2013-03-27 22:17:51

+0

謝謝,我來看看。 – 2013-03-27 22:33:25

+0

感謝您的建議,但我需要本地化GATC數據,然後才能使用您的建議構建查詢字符串。不知道爲什麼有投票結束,因爲標記的副本沒有回答我的問題。 – 2013-03-27 23:47:12

回答

2

爲了將來的參考,如果有人遇到同樣的問題,這是我實施的解決方案。我從這個SO post的答案中解除了一些代碼,並將其與this post背後的想法相結合,在這裏它將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(); } 
    }); 
}); 
+0

好的答案,謝謝 - 雖然var spl = match [i] .split(「=」);沒有考慮可能包含多於一個「=」的標籤值,即多於一個的部分。該值也應該被編碼以解釋這種可能性(保存名稱 - 值對): var str = match [i]; var index = str.indexOf(「=」); var name = str.substr(0,index); var value = encodeURIComponent(str.substr(index + 1,str.length - 1)); – GPMorgan 2013-12-10 14:53:38

+0

同意,URL正則表達式期望K/V對沒有嵌套,你是說你的問題有像發佈一個值的數組? – 2013-12-10 18:43:17

+0

是的,正是這樣 - utm標籤(我感興趣的)有時是嵌套的,所以我需要使用前面提到的擴展來傳遞正確數量的參數。再次感謝,否則我可能永遠無法獲得所有的utm標籤:) – GPMorgan 2013-12-18 10:07:29

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); 
}); 
+0

感謝您的建議,但我不想更改.submit()功能的行爲。在我的具體情況下,我有兩個.submit()函數調用鏈接到相同的formId,幸運的是jQuery能夠命名空間,因此一個提交將鏈接到另一個。這使我可以保持各個JS片段彼此分離。如果我將submit()更改爲不調用.submit(),稍後有人添加另一個.submit()函數,它可能永遠不會實現。 – 2013-03-28 20:03:25