5

LAMP システムで実行されている TinyMCE エディターを使用するフォームがあります。Google ドキュメントに似た自動保存機能を作成したいと考えています。2 つのシナリオを考えましたが、どちらもサーバーにオーバーヘッドが発生します。

  1. keyup で Ajax リクエストを投稿する
  2. 60 秒ごとに Ajax リクエストを投稿する

明らかに、最初のポイントは実現不可能です。ポイント2に対するより良い解決策を提案できる人はいますか?

編集 1

わかりましたので、3 番目のオプションは Thariama の回答と私の 2 番目のポイントの組み合わせです。

3) 10 文字以上の大幅な変更がある場合は、60 秒ごとに Ajax リクエストを送信します。

これに関する進歩は大歓迎です。

編集 2

OK、ポイント 3 に基づいてソリューションのプロトタイプを作成しました。誰かが興味を持っている場合に備えて、私のコードは次のように流れます。

私はJQueryを使用しています。TinyMCE がアタッチされたテキストエリアと、キーストロークの数を保存するための非表示フィールドを含むフォームがあります。

tinyMCE.init({
  ...
  // Callback for counting keystrokes in TinyMCE
  handle_event_callback : "keyCount"
});

$(function() {
  autoSaveContent();
});

// Callback function - Get count, increment it and then set it
function keyCount(e) {
  if(e.type == "keypress") {
    var count = parseInt($("#keyCount").val());
    count++;
    $("#keyCount").val(count);
  }
}

// Autosave every 10s if there have been over 30 keystrokes
function autoSaveContent() {
  var keyCount = parseInt($("#keyCount").val());
  if(keyCount > 30) {
    tinyMCE.triggerSave();
    var formData = $("#programmedItineraryForm").serialize();
    $.post("/path/to/save.php", formData, function(data,textStatus) {
      if(data.success) {
        $("#keyCount").val(0);
      }
    });
  }
  setTimeout('autoSaveContent()',10000);
}
4

2 に答える 2

2

うーん、多くのオプションがあります。ポイント1は確かに少し高すぎます。エディタに入力された新しい文字の数に基づいてリクエストを送信するとよいと思います。たとえば、5 ~ 10 文字ごとにリクエストを送信します。カウンター onKeyDown または onKeyUp をインクリメントし、リクエストが送信されたときにそのカウンターをリセットできます。

于 2012-10-26T08:42:58.060 に答える
0
tinymce.init({
    plugins: "autosave"
});
于 2015-05-27T16:59:12.897 に答える