2016-04-06 74 views
4

我有一個PHP頁面,將數組編碼爲JSON對象或JSONP回調,並簡單地回顯結果。因爲這將成爲一個直接訪問的獨立頁面,所以我想收集見解幷包括谷歌分析。如何在PHP JSON編碼結果中包含谷歌分析?

的JSON編碼PHP頁面:

<?php 
    $arr = array('country' => 'United States', 'city' => 'New York'); 

    if(isset ($_GET['jsonp'])) { 
     echo $_GET['jsonp'] . '(' . json_encode($arr) . ')'; 
    } 
    else { 
     echo json_encode($arr); 
    } 
?> 

jQuery的解碼部分:

<script> 
    $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=callback') 
     .done (function(location) 
     { 
      $('#country').html(location.country); 
      $('#city').html(location.city);    
     }); 
</script> 

谷歌指南建議創建一個單獨的PHP文件,它包含的JavaScript跟蹤代碼,並將其包含在所有你想跟蹤的php頁面。喜歡的東西:

<?php include_once("analyticstracking.php") ?> 

這種方式,跟蹤工作,但試圖解碼生成的JSON對象,在語法錯誤JQuery的部分斷裂,造成注入的跟蹤腳本時。 php編碼頁面也會跟蹤跟蹤腳本,這會產生無用的JSON結果。

有什麼建議嗎?

回答

1

Eike的答案指出我正確的方向,因此+1的答案,但我不得不使用cURL而不是fopen()。

我的完整有效的解決方案:

<?php 

    $curl_handle=curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL,'http://www.google-analytics.com/collect/v=1&tid=UA-xxxxxxx-1&cid=555&t=pageview&dp=%2Fgeoip.php'); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Geoip tracker'); 
    $query = curl_exec($curl_handle); 
    curl_close($curl_handle); 

    $arr = array('country' => 'United States', 'city' => 'New York'); 

    if(isset ($_GET['jsonp'])) { 
     echo $_GET['jsonp'] . '(' . json_encode($arr) . ')'; 
    } 
    else { 
     echo json_encode($arr); 
    } 
?> 
0

我想這是所有罰款與您的谷歌分析的一部分,jQuery的休息,因爲你返回在getJson一個不JSON值,在if()部分返回類似:

回調(「國家」 => '美國','城市'=>'紐約');

不是有效的json,else部分是好的,你應該在2部分中回顯相同。

+0

IF部分返回JSONP回調,一個簡單的技巧,克服了XMLHttpRequest同域策略。原始的JSON或JSONP輸出沒有錯。 –

1

你不能在頁腳中加載它嗎?

$(document).ready(function() { 
    $("analytics-tracking").load('analyticstracking.php'); 
}); 
+0

在解碼JSON對象時,只要插入html或javascript,php部分就不需要任何html代碼,也不包含頁眉,頁腳和中斷。 –

+0

.done在查詢成功後用作第二個回調。您應該在獲取JSON數據後直接執行render函數,而不是使用.done方法。檢查http://api.jquery.com/jquery.getjson/。具體來說,var jqxhr = $ .getJSON部分。 – mdarmanin

1

我不知道如果我正確地理解您的問題,但你總是可以通過measurement protocol做服務器端代碼,谷歌Analytics(分析)的電話:

$url = "v=1&t=pageview&tid=UA-39221247-1&cid=5555&dp=%2Fmy%2Fpage"; 
fopen($url); 

其中「V」爲版本,「tid」帳號,「cid」客戶端ID和「dp」頁面的文檔路徑。

這樣,解析後的輸出中就沒有會破壞jQuery代碼的跟蹤代碼。

如果您想要將各個視圖聚合到一個會話中,您需要在自己之間維護cid。

請注意,這與基於Javascript的跟蹤(即使您使用來自現有ga cookie的客戶端ID,它會在GA內啓動新會話)不能很好地混合。

+0

+1用於指向正確的方向。採用服務器端代碼的Analytics測量協議帶來了解決方案。 –