0

我使用 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

4

1 回答 1

0

我终于在这里找到了解决方案。

这样,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);
    }
});
于 2013-09-11T20:31:32.407 回答