我使用beforeunload事件来触发页面更改并清除当前页面上的“锁定”。这将在change.php文件的clearLock函数中删除。当我更改页面时,它工作正常。当我关闭标签时它也有效,但当我关闭Firefox时它不起作用。
我的解决方案是使请求同步。从技术上讲,一切都很好,一切正常。但是,页面加载的大约60%的响应时间用于等待同步请求。此外,经常会冻结几秒钟。
我的要求如下:
$(window).bind('beforeunload', function() {
var login_name=<?php echo json_encode($_SESSION['user']); ?>;
$.ajax({
type: 'POST',
url: "../libraries/change.php",
data: {
funct: "clearLock",
login: login_name
},
async:false
});
});
那么可以在窗口关闭时使用异步请求触发 beforeunload 吗?
答案 0 :(得分:0)
我终于找到了解决方案here。
这种方式Ajax调用保持同步,但仅在有人实际关闭站点时执行(关闭选项卡或带光标的浏览器)。可能不适用于键盘快捷键,但它适用于大多数情况。
/*setup the variable that stores if mouse is outside the webpage*/
var userleaving = false;
/*mouse has left the body tag, assume person is moving mouse cursor to close the window/tab*/
$("body").mouseleave(function() { userleaving = true; });
/*mouse cursor back inside the webpage*/
$("body").mouseenter(function() { userleaving = false; });
$(window).bind('beforeunload', function() {
if(userleaving) {
var login_name = <?php echo json_encode($_SESSION['user']); ?>;
$.ajax({
type: 'POST',
url: "../libraries/change.php",
data: {
funct: "clearLock",
login: login_name
},
async:false
});
return void(0);
}
});