所以基本上,我想在用户通过关闭浏览器,关闭标签或只是切换到新网站时离开我的网站时触发ajax调用。但是,我想排除重新加载。我在stackoverflow上看过这样的解决方案:
window.onbeforeunload = function(){
// call some ajax call
};
然而,此解决方案也会在重新加载时触发,这是我不想要的。
答案 0 :(得分:1)
简短回答:你不能,但你可以取得一些成就。
让您的服务器保持' AJAX调用几秒钟,并在你的身体顶部添加一个JS片段,使另一个AJAX请求说出来#34;我访问了这个页面"
如果相同的cookie /会话调用"我访问了此页面"如果离开,在几秒钟内,你知道用户可能重新加载。
它并非万无一失,但它可能适合您的需求。
答案 1 :(得分:1)
您无法保证可以通过浏览器窗口关闭的各种方式成功发送ajax调用。你可以尝试并且有时可能会成功,但找到一个不依赖于那种类型的ajax调用的更好的设计会好得多。
此外,给定的浏览器窗口不知道何时发生重新加载以及用户刚刚导航到新页面。旧页面和新页面是完全不同的Javascript上下文,它们彼此一无所知。
一种可能的机制主要是服务器端实现的,涉及webSockets。每次加载时,您的页面都会与服务器建立webSocket连接。每当页面关闭时,webSocket连接也将被关闭。
服务器可以监控webSocket,每次关闭页面时都会看到。如果服务器在每个webSocket关闭时设置一个短计时器,并且每个页面都有一个标识用户的cookie,那么服务器可以查看是否在几秒钟内重新建立了webSocket连接。如果重新建立,那么用户只是在重新加载。如果在短时间内没有重新建立,则用户已关闭或导航。
使用此机制,您的服务器可以准确监控用户何时开始查看页面以及何时关闭页面。并且,如果关闭之间的间隔非常短,然后再次打开,则基本上是重新加载(可以忽略)。因此,使用此机制,您可以跟踪所有客户端对网页的查看。