7

我正在尝试为 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

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

4

3 回答 3

13

您还需要通过序列化方法传递data参数:

$.ajax({
  type: "POST",
  url: "/posts/autosave",
  data: $("#new_post").serialize(),
  dataType: "script",
  success: function(data) {
    console.log(data);
  }
});
于 2013-02-20T22:23:43.447 回答
1

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

于 2013-02-20T22:23:33.723 回答
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);
  }

因此,这种方法非常有用,它是一个完全有效的自动保存表单功能,它可以在任何类型的对象上实现。谢谢 !

于 2019-05-22T09:17:25.543 回答