同步Ajax请求需要花费太多时间。异步工作部分

时间:2013-09-11 09:28:13

标签: jquery ajax asynchronous synchronous

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

1 个答案:

答案 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);
    }
});