假设我有一个 Rails 应用程序,用户可以在其中写博客文章。用户开始输入后,将调用一个 AJAX 函数,该函数提交一个 POST 请求并保存博客文章。我想做的是能够检查博客文章是否已经在数据库中,然后在用户键入时通过 AJAX 不断地保存它。
我正在为标题和内容博客文章输入区域使用 HTML5 contenteditable 属性:
<div id="entry-create-partial">
<div id="title-create-partial" name="title" contenteditable="true" data-placeholder='Title it' style="color:black"></div>
<div id="content-create-partial" name="content" contenteditable="true" data-placeholder='Write anything' style="color:gray"></div>
</div>
这是执行我想要的JavaScript:
$(function(){
if ($("#title-create-partial").length > 0) {
setTimeout(autoSavePost, 6000);
}
});
function autoSavePost(){
$.ajax({
type: "POST",
url: "/submissions",
dataType: "json",
data: {title: $("#title-create-partial").text().serialize(), content: $("#content-create-partial").text().serialize()},
success: function(){
$("#success-indicate").fadeIn().delay(4000).fadeOut();
}
});
setTimeout(autoSavePost, 6000);
}
但是,在我的 JS 控制台中,我收到一条错误消息,指出我提供给 .ajax 的数据没有序列化方法。我不确定如何正确地将它传递给 AJAX。
此外,一旦我通过 AJAX 发送它,我不确定如何:content
在数据库端更新它。这是create
AJAX url 路由到的控制器:
def create
@submission = Submission.where(title: params[:title]).first_or_create(
title: params[:title],
content: params[:content],
user_id: params[:user_id]
)
@submission.user = current_user
if @submission.save
redirect_to :action => :show, :id => @submission.id
else
redirect_to :action => :index
end
end
如何从 contenteditable div 发送文本,然后在控制器中如何更新内容?我听说过 update_attributes,但我不确定如何使用它。