我正在尝试跟踪我网站上发生的用户事件。一种方法是每次看到事件时发送一个ajax请求。但这会不必要地加载服务器。缓解此问题的一种方法是在卸载事件上批量发送请求(现在我已设置了16个事件的阈值)。但问题出现在“卸载/ beforeunload”事件中。
以下是我面临的问题:
除非它们是同步的,否则AJAX请求不起作用。但我需要使用异步,因为如果服务器响应缓慢,它可能会导致问题。 Stackoverflow中就此问题提出的大多数问题都建议您使用“同步”。其中一些在下面给出。
我可以使用图片。那么这个方法工作正常(请求被记录)但它是一个GET请求。我需要POST请求。
我可以在隐藏的iframe中使用结果加载的表单。这在Chrome(36.0.1985.125)上运行正常(请求已记录)但在FF(31.0)上失败。
但是在Chrome上我面临着一个奇怪的问题。也就是说,如果我删除“target”属性,则不会记录该请求。在“unload / beforeunload”事件期间启动请求是否需要“目标”属性?
其中一个stackoverflow答案表明表单提交是异步的。如果是这样的话,为什么浏览器不会像“unload / beforeunload”事件中的AJAX请求那样取消请求?和图像也一样。
我使用的测试代码如下。我在MAC上使用XAMPP服务器。
test.html前端代码。
test.php后端代码。
答案 0 :(得分:0)
尝试这种技巧:
$.post('log.php', {hello:'world'}, function() {
sleepy.abort();
});
var sleepy = $.ajax({
url: '/sleep.php',
async: false,
});
答案 1 :(得分:0)
Navigator.sendBeacon()
正是您所需要的✨
有关Navigator.sendBeacon()
的详情,请查看Millennial JS或helpful google dev article:D