2011-12-16 3 views
5

Я меняю большой раздел веб-сайта, чтобы использовать функции jQuery Address с глубокими связями AJAX. Я использую URI как mysite.com/#!/page1/subpage/ и так далее.Использование Google Analytics для отслеживания запросов AJAX

Я прочитал хороший бит об отслеживании трафика с функцией _gaq.push(), но мне было интересно, если это было возможно сделать это в немного более традиционной моды ...

Каждый запрос AJAX вызывает функцию PHP который создает страницу и возвращает ее в обертке <HTML>, которая позволяет мне легко определять пользовательские названия страниц и так далее.

Если я поместил код аналитики на эту страницу, будет ли вызов jQuery этой странице инициировать его для отслеживания посещения?

ответ

15

Ну вы можете использовать JQuery в AJAX Событие глобально прослушивающие AJAX запросов, а затем вытолкнуть индекс на _gaq массив (это кажется наиболее обслуживаемым подход):

$(document).on('ajaxComplete', function (event, request, settings) { 
    _gaq.push(['_trackPageview', settings.url]); 
}); 

Обратите внимание, что .on() нового в JQuery 1.7 и в этом случае это то же самое, что и .bind().

Также обратите внимание, что я не тестировал содержимое аргументов, переданных для глобальных событий AJAX.

UPDATE

Вы можете также использовать $.globalEval() для анализа сценариев, загруженных в теле ответа AJAX: http://api.jquery.com/jquery.globalEval/

success: function(data) { 

    var dom = $(data); 

    dom.filter('script').each(function(){ 
     $.globalEval(this.text || this.textContent || this.innerHTML || ''); 
    }); 

    $('#mydiv').html(dom.find('#something').html()); 

} 

Источник: jQuery - script tags in the HTML are parsed out by jQuery and not executed

2

Я использую систему, которая включает в себя запрос html в виде обычного текста, сначала разобрав html, чтобы поменять все теги скриптов на divs, отделить t hose divs, добавьте страницу, затем пройдите через divs (это на самом деле скрипты) и добавьте их содержимое в теги скриптов или создайте теги скрипта с помощью src на этом div. Это очень похоже на то, как это делает пример framework.js.

$.get(urlToLoad).promise().done(function(html) { 
    var outHTML = html; 
    outHTML = outHTML.replace(/<script/ig, "<div class='iscript'").replace(/<\/script/ig, '</script'); 
    outHTML = $(outHTML); 
    var scripts = outHTML.filter('div.iscript').detach(); 
    $content.html(outHTML); 
    scripts.each(function() { 
     var $this = $(this), s = document.createElement("script"); 
     if ($this.attr('src') != "") { 
     s.src = $this.attr('src'); 
     } else { 
     s.nodeValue = $this.text(); 
     } 
     $content[0].appendChild(s); // jquery's append removes script tags 
    }); 
}).always(function() { 
    $contentclone.replaceWith($content); 
    $content.slideDown(); 
    $contentclone.remove(); 
}); 

Используя этот метод, вы можете добавить скрипт, который отслеживает на каждой странице. Я лично предпочитаю делать это на глобальной странице способом, похожим на то, как предложил Джаспер.

5

других ответов устарели (по состоянию на 2013 год) - компании Google рекомендует использовать их новый Universal Analytics

Вы можете отслеживать просмотры страниц асинхронно, как это:

ga('send', 'pageview', '/my-page'); 

См: https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#overriding

+0

Что изменилось? Вы можете называть '_gaq.push (['_ trackPageview'])' всякий раз, когда вы тоже хотите ... – Jasper

+0

@ Jasper- Этот код является более актуальным – Yarin

Смежные вопросы