我是铁杆新手,所以我可能会以某种方式弄乱它(显然)。我有一个表单,通过ajax将提交发送回控制器。数据正在到达并进入数据库。目标是成功提交数据将以html格式返回,然后我可以将其添加到页面而不会导致页面刷新。
这是我的控制器:
# POST /projects
# POST /projects.json
def create
@project = Project.new(params[:project])
@project.user_id = current_user.id
respond_to do |format|
if @project.save
#format.html { redirect_to @project, notice: 'Project was successfully created.' }
#format.json { render json: @project, status: :created, location: @project }
render :partial => "projects/project", :locals => { :project => @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
我的ajax功能如下所示:
$('#new_project').submit(function(){
$.ajax({
type: 'post',
beforeSend: setHeader,
url:'/projects',
dataType: 'json',
data: $('#new_project').serialize(),
success: function(json) {
console.log(json);
parent.jQuery('#cboxClose').click();
}
});
return false;
});
最后,我的偏爱。部分是循环的一部分。循环很好,那里没有问题。循环看起来像这样:
<% @projects.each do |project| %>
<%= render :partial => "project", :object => project %>
<% end %>
部分看起来像这样:
<section class="project">
<p class="name"><span>Name: </span> <%= project.name %></p>
<p class="title"><span>Title: </span><%= project.title %></p>
<p class="title"><span>User ID: </span><%= project.user_id %></p>
<article>
<span>Details:</span> <%= project.details %>
</article>
<article>
<p>Meta:</p>
<%= link_to 'Show', project %>
<%= link_to 'Edit', edit_project_path(project), :data => { :colorbox => true,:colorbox_height => '500px', :colorbox_width => '500px', :colorbox_iframe => true } %>
<%= link_to 'Destroy', project, method: :delete, data: { confirm: 'Are you sure?' } %>
</article>
</section>
就是这样。我以为我是在正确的轨道上,但406错误让我陷入了一个循环。
答案 0 :(得分:2)
您发送ajax请求,您的应用程序应将javascript(或json)返回给浏览器。但是你调用“render”并且响应具有html类型。所以406错误就是。
如果你想在成功ajax调用后渲染部分,你应该稍微更改你的控制器(考虑对format.json使用format.js)。
控制器:
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.js #render create.js.erb
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
你应该在目录中使用这个控制器的视图创建文件create.js.erb:
$("div#that_you_wat_to_update").html("<%= escape_javascript render(:partial => 'projects/project', :locals => { :project => @project }) %>");
P.S。如果你真的想用json回复,那么你应该更新你的ajax调用以处理json响应,但这是另一个故事。