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

时间:2010-03-22 01:34:57

标签: javascript jquery ruby-on-rails ajax json

我在我的应用中的页面上进行了就地编辑(使用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

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

我想我其实想要这样做:

format.json { render :json => @comment.errors}

或者这个:

format.json {render :json => { :status => :error, :message => "Could not be saved" }.to_json, :status => 400 }

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

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

更新

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

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

1 个答案:

答案 0 :(得分:1)

我认为你最好的选择可能只是在这种情况下破解插件,因为插件没有错误处理程序真的很愚蠢。提示:也许告诉插件的作者,处理错误会很好,很有用(如果连接失败或者什么?插件永远不会知道,对用户没有反馈)。

如果您在成功选项

之后在jquery.rest_in_place.js的第33行附近添加类似的内容就足够了
"error": function(xhr, state, error) {
  //do error handling here e.g.
  alert(state);
  //or $.parseJSON(xhr.responseText) and whatever or similar
}