AJAX自动保存功能

ant*_*upe 28 javascript ajax synchronize

什么是已实现自动保存功能的最佳javascript库,或库的插件或扩展?

具体需要是能够"保存"数据网格.想想gmail和Google Documents的自动保存.

如果它已经被发明,我不想重新发明轮子.我正在寻找神奇的autoSave()函数的现有实现.

自动保存:推送到保存到持久存储的服务器代码,通常是数据库.服务器代码框架超出了本问题的范围.

请注意,我不是在寻找一个Ajax库,而是一个更高级别的库/框架:与表单本身进行交互.

daemach在jQuery @ http://daemach.blogspot.de/2007/03/autosave-jquery-plugin.html [script host down] 上引入了一个实现.我不相信它符合轻量级和精心设计的标准.

标准

  • 稳定,轻便,精心设计
  • 保存onChange和/或onBlur
  • 在给定的毫秒数之后不再频繁地保存
  • 处理同时发生的多个更新
  • 如果自上次保存后未发生任何更改,则不保存
  • 每个输入类保存到不同的URL

jri*_*sta 47

自动保存应该非常简单,您可以使用jquery或mootools等主要框架之一.您需要做的就是在用户编辑应该自动保存的内容时使用window.setTimeout(),并将该超时调用为javascript框架标准的AJAX内容.

例如(使用jquery):

var autosaveOn = false;
function myAutosavedTextbox_onTextChanged()
{
    if (!autosaveOn)
    {
        autosaveOn = true;

        $('#myAutosavedTextbox').everyTime("300000", function(){
             $.ajax({
                 type: "POST",
                 url: "autosavecallbackurl",
                 data: "id=1",
                 success: function(msg) {
                     $('#autosavenotify').text(msg);
                 }
             });
        }); //closing tag
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我有点困惑.您正在寻找使用现有框架的解决方案.上面的例子完全基于jquery,这是一个非常丰富的javascript框架,在我的例子的18行中,隐藏了上面例子的真正复杂性.如果那不是你想要的......究竟你在找什么? (36认同)
  • >发明方向盘 (2认同)
  • 不幸的是,在 daemach 的博客文章中,脚本的链接现在重定向到一个虚假的防病毒页面。 (2认同)

Cla*_*abe 18

我知道这个问题很老,但我想包含一个我最喜欢的代码.我在这里找到了它:http: //codetunnel.io/how-to-implement-autosave-in-your-web-app/

这是代码:

var $status = $('#status'),
    $commentBox = $('#commentBox'),
    timeoutId;

$commentBox.keypress(function () { // or keyup to detect backspaces
    $status.attr('class', 'pending').text('changes pending');

    // If a timer was already started, clear it.
    if (timeoutId) clearTimeout(timeoutId);

    // Set timer that will save comment when it fires.
    timeoutId = setTimeout(function () {
        // Make ajax call to save data.
        $status.attr('class', 'saved').text('changes saved');
    }, 750);
});
Run Code Online (Sandbox Code Playgroud)

在用户停止写入超过750毫秒后,它会保存.

它还具有一个状态,让用户知道更改已保存

  • 我也喜欢这个,工作得很好,也很好.我唯一改变的就是按键进入键盘.这可确保还检测到退格... (3认同)