我有一个跟踪事件(以对跟踪服务器的http调用的形式),点击链接时触发,由onclick事件触发。
但是,通常情况下,跟踪服务器并未注册该事件,因为浏览器在加载新页面时会切断(长时间运行)事件调用。
我不愿意在将用户转发到新页面之前等待回复,以防回复延迟且用户必须等待。
有没有办法确保事件调用完成并立即转发用户?
答案 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);
}