我正在尝试为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数据的一部分发送的内容。
答案 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);
}
因此,此方法非常有用,并且可以完全正常工作的自动保存 表单功能,可以在任何类型的对象上实现。谢谢!
完整问题和解决方案链接何时以及如何遇到此问题