2011-12-16 36 views
5

Tôi đang thay đổi một phần lớn của trang web để sử dụng các tính năng AJAX liên kết sâu của Địa chỉ jQuery. Tôi đang sử dụng các URI như mysite.com/#!/page1/subpage/ và cứ tiếp tục như vậy.Sử dụng Google Analytics để theo dõi các yêu cầu AJAX

Tôi đã đọc một chút tốt về việc theo dõi giao thông với _gaq.push() hàm, nhưng tôi đã tự hỏi, nếu nó đã có thể làm điều đó trong một chút thời trang truyền thống hơn ...

Mỗi AJAX request gọi một hàm PHP xây dựng trang và trả về trang đó trong một trình bao bọc <HTML>, cho phép tôi dễ dàng xác định tiêu đề trang tùy chỉnh, v.v.

Nếu tôi đặt mã phân tích trên trang đó, jQuery có gọi trang đó kích hoạt trang đó để theo dõi lượt truy cập không?

Trả lời

15

Vâng, bạn có thể sử dụng AJAX Sự kiện của jQuery để nghe trên toàn cầu cho các yêu cầu AJAX và sau đó đẩy một chỉ số vào mảng _gaq (điều này có vẻ như phương pháp duy trì nhất):

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

Lưu ý rằng .on() là mới trong jQuery 1,7 và giống như .bind() trong trường hợp này.

Cũng lưu ý rằng tôi chưa kiểm tra nội dung của các đối số được chuyển cho các sự kiện AJAX toàn cầu.

CẬP NHẬT

Bạn cũng có thể sử dụng $.globalEval() để phân tích các kịch bản được tải trong một phản ứng cơ thể 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()); 

} 

Nguồn: jQuery - script tags in the HTML are parsed out by jQuery and not executed

2

tôi sử dụng một hệ thống có liên quan đến yêu cầu html dưới dạng văn bản thuần túy, phân tích cú pháp html đầu tiên để thay đổi tất cả thẻ tập lệnh thành divs, tách t divs ống, nối thêm trang, sau đó lặp qua các div (thực sự là các tập lệnh) và nối thêm nội dung của chúng vào các thẻ script hoặc tạo các thẻ script với src trên div đó. Nó rất giống với cách mà ví dụ framework history.js thực hiện nó.

$.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(); 
}); 

sử dụng phương pháp này, bạn có thể thêm đoạn mã mà không được theo dõi trên mỗi trang. Cá nhân tôi thích làm điều đó trên trang toàn cầu theo cách tương tự như cách Jasper đề xuất.

5

Những câu trả lời khác là lạc hậu (tính đến 2013) - Google khuyến cáo sử dụng của họ mới Universal Analytics

Bạn có thể theo dõi lượt xem trang không đồng bộ như thế này:

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

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

+0

Có gì khác nhau? Bạn có thể gọi '_gaq.push (['_ trackPageview'])' bất cứ khi nào bạn muốn ... – Jasper

+0

@ Jasper- Mã này hiện tại – Yarin

Các vấn đề liên quan