如何在链接点击上可靠地发送跟踪事件?

时间:2015-08-19 12:50:22

标签: javascript

我有一个跟踪事件(以对跟踪服务器的http调用的形式),点击链接时触发,由onclick事件触发。

但是,通常情况下,跟踪服务器并未注册该事件,因为浏览器在加载新页面时会切断(长时间运行)事件调用。

我不愿意在将用户转发到新页面之前等待回复,以防回复延迟且用户必须等待。

有没有办法确保事件调用完成并立即转发用户?

2 个答案:

答案 0 :(得分:0)

也许preventDefault会帮助你。你不能分享你的代码,因为我用这种方式解释你:

 $('a.link').on('click', function(e) {

     e.preventDefault();
     var trackingLink = $(this).attr('href');
     // do ajax stuff
     $.ajax().success(function() {
          window.location.href = trackingLink;
     });

 });

使用preventDefault(),您可以避免加载页面的链接,然后发出ajax请求,以及它是否成功重定向到链接页面

答案 1 :(得分:0)

一个选项是结束'unload'事件处理程序,并将数据发送给处理程序。这将延迟页面的卸载。

示例:

$(window).on('unload', function() {
    $.ajax({
      method: "POST",
      url: "serverUrl",
      data: { logData: '....' }
    })
});

也许您可以使用.sendBeacon方法。它目前仅受Chrome和Firefox支持,但MDN的说明似乎符合您的需求:

  

此方法可满足分析和诊断代码的需求   通常尝试在卸载之前将数据发送到Web服务器   该文件。

示例(来自MDN文章):

window.addEventListener('unload', logData, false);

function logData() {
    navigator.sendBeacon("/log", analyticsData);
}