ruby-on-rails - 我在 ajax 返回时收到 406 错误

标签 ruby-on-rails ruby-on-rails-3

我是 Rails 新手,所以我可能以某种方式搞砸了(显然)。我有一个表单,通过 ajax 将提交发送回 Controller 。数据正在到达那里并进入数据库。目标是成功提交后,数据将以 html 格式返回,然后我可以将其添加到页面前面,而不会导致页面刷新。

这是我的 Controller :

# 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>

就是这样。我以为我走在正确的 rails 上,但 406 错误让我陷入了困境。

最佳答案

您发送 ajax 请求,您的应用程序应将 javascript(或 json)返回到浏览器。但是你调用“render”并且响应具有 html 类型。所以406错误是。

如果你想在成功的 ajax 调用后渲染部分内容,你应该稍微改变你的 Controller (考虑使用 format.js 来代替 format.json)。

Controller :

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

您应该在包含此 Controller View 的目录中创建文件 create.js.erb ,如下所示:

$("div#that_you_wat_to_update").html("<%= escape_javascript render(:partial => 'projects/project', :locals => { :project => @project }) %>");

附注如果您确实想使用 json 进行响应,那么您应该更新 ajax 调用来处理 json 响应,但这是另一个故事。

关于ruby-on-rails - 我在 ajax 返回时收到 406 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16736285/

相关文章:

ruby-on-rails-3 - 使用 Rails、MySQL 和 Active Record 查询 where date = Date.today

javascript - (Ruby、Rails、Javascript)使用 javascript 窗口等管理嵌套模型...?

ruby-on-rails - Rails 3,具有 lambda 条件的 has_one/has_many

ruby-on-rails - try 方法和 && 运算符有相同的用途吗?

java - Spring MVC 中 Devise (Ruby on Rails) 的等价物?

ruby-on-rails - 如何在 rails 中自定义设计表单 css

ruby - HTTP 摘要 + Rspec

jquery - 元素中 .addClass() 方法的问题

ruby-on-rails - 如何配置 Fine Uploader 以发出与 Rails 兼容的请求?

ruby-on-rails - 无法上传文件