javascript - JQuery $.post() 不适用于 document.onbeforeunload 事件吗?

标签 javascript dom onbeforeunload jquery-post

我正在尝试使用 $.post 将表单数据发送到服务器端脚本,以便在用户尝试离开页面而不提交表单时保存。我使用附加到保存按钮的相同功能,并将 setInterval 设置为每 2 分钟一次,效果很好。但是当我将该函数附加到 document.onbeforeunload 时,它不起作用。在 firebug 中,我看到请求正在发送,但看起来在返回状态代码之前已停止并且页面继续卸载。我对 Javascript 和 Jquery 还很陌生,我不确定 $.post 是否是那些可能无法在 onbeforeunload 事件上工作的函数之一。如果这是真的,如果用户尝试离开页面而不保存,是否有其他方法可以发送数据?

This is the function I am calling from the onbeforeunload event:

           function ajaxSubmit(){
                var blogtitle = $("#title").val();
                var publishedstate = 0;
                var blogid = $("#blogID").val();
                var blogbody = CKEDITOR.instances['body'].getData();

                var postdata = {ajaxSubmit:true,title:blogtitle,body:blogbody,published:publishedstate,blog_id:blogid};
                $.post('ajaxblog.php',postdata,function(data){
                    $("#autosaveMessage").html(data);
                    $("#autosaveMessage").show();
                    setTimeout(function(){$("#autosaveMessage").hide();},5000);
                });
            }

这就是我调用该函数的方式:

               var post_clicked = false;
            $("#postButton").click(function(){
                post_clicked = true;
            });

            function leaveEditor(){
                if(post_clicked==false){
                    ajaxSubmit();
                }
                else{
                    //Do Nothing
                }
            }

window.onbeforeunload = leaveEditor;

最佳答案

不,这是设计使然。如果页面可以使用 onbeforeunload 无限期地延迟浏览、以某种方式保持其存在等,那将是非常麻烦的。网络浏览器用户最重要的能力之一是能够离开

只需使用字符串返回值 - 其全部目的是提醒用户他/她所做的更改将会丢失。就像这样:)

关于javascript - JQuery $.post() 不适用于 document.onbeforeunload 事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816512/

相关文章:

javascript - 如何从 JavaScript 为 IE 配置打印机设置?

javascript - 如何在使用多个集合的 DocumentDB 中使用存储过程

dom - 在 React 中操作 <html> 或 <body> 标签

javascript - 有没有办法对 AJAX 表单执行类似于 onbeforeunload 的操作?

javascript - 如何在pageunload上执行一个js函数

javascript - Google map 上未显示带有信息窗口的多个标记

javascript - 我应该使用环境变量还是 module.exports 作为 Heroku 上小型个人应用程序的用户名和密码?

jquery - 如何打印或迭代附加到元素的每个事件监听器?

javascript - 文档片段 VS 创建未附加的 div

javascript - 检查卸载前是否保存了更改