2011-12-16 10 views
5

Estoy cambiando una gran sección de un sitio web para utilizar las funciones AJAX de jQuery Address. Estoy usando URI como mysite.com/#!/page1/subpage/ y así sucesivamente.Uso de Google Analytics para rastrear solicitudes AJAX

he leído un buen poco sobre el seguimiento del tráfico con la función _gaq.push(), pero me preguntaba si era posible hacerlo en un poco la moda más tradicional ...

Cada petición AJAX llama a una función de PHP que crea una página y la devuelve en un contenedor <HTML>, lo que me permite definir fácilmente títulos de página personalizados, etc.

Si pongo el código de análisis en esa página, ¿JQuery llamará a esa página para activarlo y rastrear la visita?

Respuesta

15

Bien puede utilizar AJAX Eventos de jQuery para escuchar a nivel mundial para peticiones AJAX y luego empujar un índice sobre la matriz _gaq (esto parece ser el enfoque más mantenible):

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

Tenga en cuenta que .on() es nuevo en jQuery 1.7 y es lo mismo que .bind() en este caso.

También tenga en cuenta que no he probado el contenido de los argumentos aprobados para eventos AJAX globales.

ACTUALIZACIÓN

Puede también utilizar $.globalEval() para analizar las secuencias de comandos cargados en un cuerpo de la respuesta 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()); 

} 

Fuente: jQuery - script tags in the HTML are parsed out by jQuery and not executed

2

Yo uso un sistema que consiste en solicitar el html como texto sin formato, analizando el html primero para cambiar todas las etiquetas del script en divs, separe t manguera divs, agregue la página, luego recorra los divs (que en realidad son scripts) y agregue su contenido a las etiquetas de scripts o cree etiquetas de script con src en ese div. Es muy similar a cómo lo hace el ejemplo del marco de history.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(); 
}); 

utilizando este método, puede agregar el script que realiza el seguimiento en cada página. Personalmente prefiero hacerlo en la página global de una manera similar a como sugirió Jasper.

5

Las otras respuestas son anticuados (a partir de 2013) - Google del recomienda el uso de su nuevo Universal Analytics

Puede hacer un seguimiento de páginas vistas de forma asincrónica como este:

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

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

+0

Lo que es diferente? Puedes llamar a '_gaq.push (['_ trackPageview'])' siempre que quieras también ... – Jasper

+0

@ Jasper- Este código es más actual – Yarin

Cuestiones relacionadas