2

たとえば、誰かが記事を書いているときに、誤ってブラウザを閉じてしまいました。彼が書いたものすべてを保存することは可能ですか?

このようなもの:

onExit -> ユーザーが入力したすべての情報を取得 -> データベースに情報を保存する AJAX リクエスト。

または

x秒ごとに先制的に保存することによってのみ可能ですか?

4

3 に答える 3

2

私の会社は ajax クエリを実行して 5 秒ごとに保存することでこれをlocalStorage行っていますが、クライアントでの保存を調べ、onunloadそれを保存して後で回復するために使用する必要があります。

すべてのイベントと 500 ミリ秒ごとに保存し、1 つのフィールドを保存するhtml5 のメモ帳を作成しましたが、簡単に変更できます。(必須の) コードは次のとおりです。localStorageonchangeonbeforeunload

<textarea placeholder="Type here, see it here..."  id="notepad"></textarea>
<script>
    var n = document.getElementById("notepad");
    /* save */
    var s = function(){localStorage.setItem("notepad", n.value);}
    /* retrieve (only on page load) */
    if(window.localStorage){ n.value = localStorage.getItem("notepad");}
    /* autosave onchange and every 500ms and when you close the window */
    n.onchange = s();
    setInterval( s, 500);
    window.onunload = s();
</script>

そのページのソースを表示すると、古いブラウザをサポートするために使用されるポリフィルも見つかりますが、IE8+で動作するlocalStorageはずです

クライアントが単独で ajax 呼び出しを完了するとは信じてonbeforeunloadいませんが、上位のブラウザーでその機能がどのように機能するかについては、本当にすべてを知っているわけではありません。

于 2012-06-04T13:20:15.790 に答える
1

ローカル ストレージと ajax の組み合わせを使用する可能性が高く、非アクティブな期間の後に ajax 要求が行われるように遅延 setTimeout を使用します。

たとえば、保存するアイテムのイベントに ajax の更新をバインドします。

$("#fieldToSave").bind("keyup",(function()
        {
            var timeoutId = null;
            var previous = "";
            return function(e)
            {
                var that = this;

                if ($(that).val() != previous)
                {
                    previous = $(that).val();
                    clearTimeout(timeoutId);
                    timeoutId = setTimeout(function()
                    {
                        ajaxRefresh();

                        if(window.localStorage)
                        {
                            localStorage.setItem("notepad", that.value);} 
                        }
                    }, 300);
                }
            };
        })());

このアプローチは、ajax とローカル ストレージの両方を使用して「fieldToSave」の値を保持します。さらに、何度も継続的に保存するわけではありません。たとえば、キーアップで行うことは、保存を実行しますが、300 ミリ秒ごとに 1 回だけです。したがって、ユーザーが継続的に入力している場合、ユーザーが 300 ミリ秒停止するまで保存されません。これは、実際に必要なイベントにバインドできます。

ページの読み込み時にコンテンツをどこからどのように読み込むかは、あなた次第です。

お役に立てれば。

于 2012-06-04T13:59:14.333 に答える
0

の答え: x 秒ごとにプリエンプティブに保存することによってのみ可能ですか? 以下です

私がブローコードで行ったように、特定の時間の ajax 関数を呼び出す必要があります...settime out 関数は、1000 秒ごとに ajaxRefresh 関数を呼び出します...

function onLoad() {
    setTimeout(ajaxRefresh, 1000);
} 

function ajaxRefresh()
{
    //ajax code to post data 
    $.ajax({
                type: "GET",        //GET or POST or PUT or DELETE verb
                url: ajaxUrl,       // Location of the service
                data: "",       //Data sent to server
                contentType: "",        // content type sent to server
                dataType: "json",   //Expected data format from server
                processdata: true,  //True or False
                success: function (json) {//On Successful service call
                    var result = json.name;
                    $("#dvAjax").html(result);
                },
                error: function() { alert("err")};  // When Service call fails
            });

    setTimeout(ajaxRefresh, 1000);
}
于 2012-06-04T13:21:09.800 に答える