JQuery $ .post()不能与document.onbeforeunload事件一起使用吗?

时间:2013-02-11 16:34:40

标签: 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;

1 个答案:

答案 0 :(得分:1)

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

只需使用stringy返回值 - 它的全部内容就是提醒用户他/她做出了将要丢失的更改。喜欢SO:)