【问题标题】:PHP update database on close window关闭窗口上的 PHP 更新数据库
【发布时间】:2014-11-30 19:31:48
【问题描述】:

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

$(window).bind('unload', function(){
    $.ajax({
        type: 'get',
        async: false,
        url: 'liberaLugar.php?idCurso=2'
    });
});

任何帮助将不胜感激。 提前致谢!

【问题讨论】:

    标签: javascript jquery ajax onbeforeunload


    【解决方案1】:

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

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

    编辑:同步 AJAX 现在在 Webkit 浏览器中已弃用。

    【讨论】:

    • 这非常有效!非常感谢您。还有一件事,如果我提交表单,我怎么能忽略这些事件?也许是一个全局变量?
    • @AndresCavazos 是的,在你的表单提交代码中设置一个全局的,就像我在这个例子中的方式一样。然后在卸载函数中,检查变量是否为真,如果为真则返回假。
    • @r3wt, 如果 Synchronous AJAX 现在在 Webkit 浏览器中已被弃用 那么如何在这些浏览器中实现呢?
    • @IgorSavinkin 我不知道你是否仍然可以,但如果你添加一个if(confirm('some message'){ ... } 块,它可能允许你执行正常的异步请求。如果这是你真正需要的东西,我建议你只需要进行实验。另一种策略可能是在您的服务器上设置一个 ping 端点,当它在 5 分钟内没有收到用户的消息时,它会执行它过去对 ajax 请求所做的工作。希望有帮助。
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多