【问题标题】:Autosaving a form in Rails with AJAX使用 AJAX 在 Rails 中自动保存表单
【发布时间】:2013-02-20 22:20:48
【问题描述】:

我正在尝试为 Post#new 操作自动保存表单。每隔一分钟左右,我想 POST 到 Post#autosave,然后我会检查 first_or_create 并保存/更新 Posts 表中的记录。不过我的问题是,我无法再从表单中访问 POST 参数。我正在尝试这样做:

$(function() {
  if ($("#new_post").length > 0) {
    setTimeout(autoSavePost, 60000); 
  }    
});

function autoSavePost() {
  $.ajax({
    type: "POST",
    url: "/posts/autosave",
    dataType: "script",
    success: function(data) {
      console.log(data);
    }
  });
  setTimeout(autoSavePost, 60000);
}

我有这条路线:

post 'posts/autosave', as: :autosave_post_path

问题是,服务器日志显示 params 哈希仅包含 :action 和 :controller。我如何才能访问作为 POST 数据的一部分发送的等效内容。

【问题讨论】:

    标签: jquery ruby-on-rails ajax post-parameter


    【解决方案1】:

    您还需要通过serialize 方法传递data 参数:

    $.ajax({
      type: "POST",
      url: "/posts/autosave",
      data: $("#new_post").serialize(),
      dataType: "script",
      success: function(data) {
        console.log(data);
      }
    });
    

    【讨论】:

    • 你就是男人!非常感谢。我查看了您链接的文档,我不清楚它到底在做什么,您是否有更深入的了解可以总结一下?再次感谢。
    • “.serialize() 方法以标准的 URL 编码表示法创建一个文本字符串。”,即它将表单内容序列化为param1=value1&param2=value2&...&paramN=valueN,然后 Rails 将其反序列化回一个对象。跨度>
    • @mackshkatz 您可以将序列化视为遍历表单中的所有表单元素并将要提交的数据收集到一个长字符串中。然后在 POST 请求中将其发送到您的 rails 控制器。如果是 GET 请求,则相当于根据表单字段中输入的值为您创建查询字符串。
    【解决方案2】:

    看一下 serialize() 函数:http://api.jquery.com/serialize/:您可以使用它创建一个数据数组以作为参数传递给您的控制器。

    【讨论】:

      【解决方案3】:

      所以,我正在解释新的表单脚本

      function autoSavePost() {
        $.ajax({
            type: "POST",
            url: '/quotes',
            data: $("#new_post").serialize(),
            dataType: "script",
        });
      }
      

      将 Post 请求发送到刚才的控制器 在数据库中插入对象后呈现编辑表单,或者更好地说 在持久化记录之后。

      在编辑页面被渲染后,我们在那里写了一个脚本来在一些时间间隔后更新对象

      function autoSavePost() {
          $.ajax({
            type: "PATCH",
            url: "/post/<%= post.id %>",
            data: $("#edit_post").serialize(),
            dataType: "script",
            success: function(data) {
              console.log("data")
            }
          });
          setTimeout(autoSavePost, 60000);
        }
      

      所以,这种方法非常有用,而且它完全可以自动保存 形成特征,它可以在任何类型的对象上实现。谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2019-06-30
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        相关资源
        最近更新 更多