Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭窗口时PHP更新数据库_Javascript_Jquery_Ajax_Onbeforeunload - Fatal编程技术网

Javascript 关闭窗口时PHP更新数据库

Javascript 关闭窗口时PHP更新数据库,javascript,jquery,ajax,onbeforeunload,Javascript,Jquery,Ajax,Onbeforeunload,当用户关闭或刷新浏览器时,我正在尝试更新数据库。这是我的代码: $(window).bind('unload', function(){ $.ajax({ type: 'get', async: false, url: 'liberaLugar.php?idCurso=2' }); }); 任何帮助都将不胜感激。 提前谢谢 这在大多数情况下都适用。当然,如果您的服务器无法访问,您可以冻结浏览器,因此我们还应该添加一个超时。给你的用

当用户关闭或刷新浏览器时,我正在尝试更新数据库。这是我的代码:

$(window).bind('unload', function(){
    $.ajax({
        type: 'get',
        async: false,
        url: 'liberaLugar.php?idCurso=2'
    });
});
任何帮助都将不胜感激。
提前谢谢

这在大多数情况下都适用。当然,如果您的服务器无法访问,您可以冻结浏览器,因此我们还应该添加一个超时。给你的用户一些关于到底发生了什么的视觉指示可能也会有帮助,所以我们应该将光标设置为等待

var unloaded = false;
$(window).on('beforeunload', unload);
$(window).on('unload', unload);  
function unload(){      
    if(!unloaded){
        $('body').css('cursor','wait');
        $.ajax({
            type: 'get',
            async: false,
            url: 'liberaLugar.php?idCurso=2',
            success:function(){ 
                unloaded = true; 
                $('body').css('cursor','default');
            },
            timeout: 5000
        });
    }
}

编辑:现在Webkit浏览器中不推荐使用同步AJAX。

这非常有效!非常感谢你。还有一件事,如果我提交表格,我怎么能忽略这些事件?也许是一个全局变量?@AndresCavazos是的,在表单提交代码中设置一个全局变量,就像我在本例中所做的那样。然后在unload函数中,检查变量是否为true,如果为true,则返回false。@r3wt,如果同步AJAX现在在Webkit浏览器中不受欢迎,那么如何在这些浏览器中实现呢?@IgorSavinkin我不知道您是否仍然可以,但如果您添加
if(确认('some message'){…}
block它可能允许您执行普通的异步请求。如果这是您真正需要的,我建议您只需进行实验。另一种策略可能是在您的服务器上安装一个ping端点,当它在5分钟内没有收到用户的消息时,它会执行与ajax请求相同的工作。希望这没用。