$(窗口).unload没有按预期工作

Rod*_*nte 3 javascript chat

我正在使用PHP + MySQL + JavaScript创建一个小型聊天应用程序,我编写了一个函数disonnectUser(),当用户按下断开连接按钮时会调用该函数.这里是:

function disconnectUser(){
            $.post('web/WEB-INF/classes/handleChatUser.php',{ action: 'disconnect',nick: localNickname});           
            $('#chat').stop(true,true).fadeOut(2000,function(){
                nicknameDialog();
            });

            $('#messageInput').val(null);
            $('#clientList').html(null);
            $('#chatScreen').html(null);
            clearInterval(refreshIntervalId);
            clearInterval(refreshIntervalId2);
            connected = false;
        }
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力,但当我在另一个上下文中调用这个函数时,当用户而不是按断开连接只是退出页面时,在这个函数中

$(window).unload(function() {
                if(connected){
                disconnectUser();
                connected = false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

它不起作用.而且我确定它正在被调用,因为如果我发出警报,它会在关闭页面之前正常调用.我认为在代码完全运行之前页面正在关闭,所以我想如果我在那里放一些块直到代码完成运行它会工作吗?

Eri*_*lli 6

问题是$(window).unload()在关闭窗口之前不等待任何AJAX调用(因为AJAX是assync,这是正确的).

您需要强制AJAX同步,即等待响应.你的disconnectUser功能内部:

$.ajax({
    type: 'POST',
    async: false, // This is the guy.
    url: '/blablabla'
});
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息:$(window).unload在离开网页之前等待AJAX​​调用完成