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