如何使用JSON和jQuery在Rails 2.3.5中显示服务器错误

Dan*_*hoe 8 javascript ajax jquery json ruby-on-rails

我在我的应用程序的页面上进行了就地编辑(使用Rails 2.3.5和jQuery).我想知道更新失败时如何在页面上显示错误.

我正在使用ajax(XMLHttpRequest)来保存对Comment对象的更新.控制器有一个这样的更新方法:

def update
  @comment = Comment.find(params[:id])
  respond_to do |format|
    # if @comment.update_attributes!(params[:comment])
    if false #deliberately forcing a fail here to see what happens
      format.json { render :nothing =>  true }
    else
      format.json { render :json => @comment.errors, :status => :unprocessable_entity }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在Firebug中,我可以看到服务器返回"422"(适当的验证错误状态代码).但它是对XMLHttpRequest的响应,因此没有重定向到错误页面.

我想我其实想要这样做:

format.json { render :json => @comment.errors}
Run Code Online (Sandbox Code Playgroud)

或者这个:

format.json {render :json => { :status => :error, :message => "Could not be saved" }.to_json, :status => 400 }
Run Code Online (Sandbox Code Playgroud)

并触发一些迭代(并显示)任何错误的Javascript函数.

我正在使用rails插件REST来实现就地编辑.它似乎没有任何回调函数来处理故障.我有什么选择?我可以编写一些Javascript来响应失败情况而不破解插件吗?我是否必须破解rest_in_place插件来处理故障情况?是否有更好的插件(对于Rails或jQuery)处理就地编辑,包括失败条件?

UPDATE

来自Peter Bui 标准JSON响应Rails和jQuery的这篇文章有助于展示如何使用服务器处理错误消息XMLHttpRequest.status.我用ajax paydro-talks查看了他对博客的实现.我对处理简单错误条件所需的复杂性感到惊讶.通常Rails已经融入了所有的优点,但似乎JSON的服务器错误超出了范围.可以吗?

我还查看了grimen的validatious-on-rails,当使用ajax XMLHttpRequest时,它适用于模型验证.我不清楚如何使用它来处理验证成功时"保存"失败的一般情况.

jit*_*ter 1

我认为你最好的选择可能是在这种情况下破解插件,因为插件没有错误处理程序确实很愚蠢。提示:也许告诉插件的作者,处理错误会很好而且很有用(如果连接失败或发生任何事情怎么办?插件永远不会知道并且不会向用户提供反馈)。

jquery.rest_in_place.js如果您在 success 选项之后的第 33 行周围添加类似的内容就足够了

"error": function(xhr, state, error) {
  //do error handling here e.g.
  alert(state);
  //or $.parseJSON(xhr.responseText) and whatever or similar
}
Run Code Online (Sandbox Code Playgroud)