使用AJAX在Rails中自动保存表单

时间:2013-02-20 22:20:48

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

我正在尝试为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数据的一部分发送的内容。

3 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

将发布请求发送到控制器   将对象插入数据库后,渲染渲染表单,或者更好地说   保留记录后。

渲染页面后,我们在此处编写了一个脚本,以在间隔一段时间后更新对象

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

因此,此方法非常有用,并且可以完全正常工作的自动保存   表单功能,可以在任何类型的对象上实现。谢谢!

完整问题和解决方案链接何时以及如何遇到此问题

Auto Save Form Feature is failing