使用TinyMCE的Google Docs样式自动保存

时间:2012-10-26 08:28:05

标签: php jquery ajax tinymce google-docs

我有一个使用在LAMP系统上运行的TinyMCE编辑器的表单。我希望创建一个类似于Google文档的自动保存功能。我想到了两个场景,但两者都会在服务器上产生开销。

  1. 在keyup上发布Ajax请求
  2. 每60秒发布一次Ajax请求
  3. 显然,第一点是不可行的。任何人都可以建议更好地解决第二点问题吗?

    修改1

    好的,所以第三种选择可能是Thariama的回答和我的第二点的结合。

    3)如果有显着变化,例如10个字符或更多,则每60秒发布一次Ajax请求

    对此的任何进展都将非常感激。

    修改2

    好的我已根据第3点制作了我的解决方案的原型。如果有人感兴趣,我的代码流程如下:

    我正在使用JQuery。我有一个带有TinyMCE的textarea表单和一个用于存储击键次数的隐藏字段。

    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);
    }
    

2 个答案:

答案 0 :(得分:2)

嗯,有很多选择。 第1点确实有点贵。 我认为根据编辑器中输入的新字符数发送请求是个好主意。例如,每5-10个新字符发送一个请求。 您可以递增计数器onKeyDown或onKeyUp,并在发送请求时重置该计数器。

答案 1 :(得分:0)

tinymce.init({
    plugins: "autosave"
});