【问题标题】:Handling json response from update in Rails 3在 Rails 3 中处理来自更新的 json 响应
【发布时间】:2013-01-12 23:43:28
【问题描述】:

我只是想了解这里的基本反应。我有一个未经编辑的控制器方法

  def update
    @ledgeritem = Ledgeritem.find(params[:id])

    respond_to do |format|
      if @ledgeritem.update_attributes(params[:ledgeritem])
        format.html { redirect_to @ledgeritem, :notice => 'Ledgeritem was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render :action => "edit" }
        format.json { render :json => @ledgeritem.errors, :status => :unprocessable_entity }
      end
    end
  end

还有我的 ajax

$.ajax({
    type: "PUT",
    url: "/ledgeritems/" + id + ".json",
    data: $(this).serialize(),
    dataType: "json",
    success: function (result) {
        alert(result);
    }
});

我的提醒从未显示,但该项目确实会更新。读取和处理 json 响应的正确方法是什么?我知道这是一个基本问题,但我找不到任何关于此的示例或信息。

【问题讨论】:

  • 请注意,并非所有 AJAX 浏览器都支持 PUT

标签: ruby-on-rails ruby-on-rails-3 json jquery


【解决方案1】:

在你的控制器中,改变

format.json { head :no_content }

format.json { render json: @ledgeritem }

head :no_content 只会返回 http 代码 204,表示页面上没有内容。这里不需要这个。

【讨论】:

  • 我的警报仍然没有显示此代码,但我想知道这是否是因为我得到的响应是空白的。这就是更新成功时给我带来的影响,它会发回一个空白响应。
  • 尝试将head :json => @ledgeritem更改为render :json => @ledgeritem
  • 对不起,我更新了代码,那不是里面的内容,默认情况下它有 head :no_content
  • 请尽量具体说:format.json { render json: @ledgeritem }
  • @Charles 在设置了dataType:'json' 时不需要使用parseJSON。 jQUery 已经完成了,result 已经是一个对象。这记录在$.ajax API
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2017-02-10
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多