1

$ .postを使用して、ユーザーがフォームを送信せずにページを離れようとした場合に保存されるサーバー側スクリプトにフォームデータを送信しようとしています。保存ボタンに接続され、2分ごとに設定されたsetIntervalで同じ機能を使用していますが、正常に動作します。しかし、関数をdocument.onbeforeunloadにアタッチすると、機能しません。ファイアバグでは、リクエストが送信されているように見えますが、ステータスコードが返され、ページのアンロードが続行される前にリクエストが停止されているようです。私はまだJavascriptとJqueryにかなり慣れていないので、$。postがonbeforeunloadイベントで機能しない可能性のある関数の1つであるかどうかはわかりません。それが本当なら、ユーザーが保存せずにページを離れようとした場合にデータを送信できる別の方法はありますか?

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;
4

1 に答える 1

1

いいえ、これは仕様によるものです。ページがブラウジングを無期限に遅らせたり、何らかの形でその存在を維持したりするために使用できるとしたら、非常に面倒ですonbeforeunload。Webブラウザのユーザーが持つ最も重要な機能の1つは、離れる機能です。

文字列の戻り値を使用するだけです。その要点は、失われる変更を行ったことをユーザーに通知することです。SOのように:)

于 2013-02-12T19:09:13.697 に答える