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

Posted

技术标签:

【中文标题】如何使用 JSON 和 jQuery 在 Rails 2.3.5 中显示服务器错误【英文标题】:How to show server errors in Rails 2.3.5 with JSON and jQuery 【发布时间】:2011-01-30 04:20:00 【问题描述】:

我在我的应用程序的页面上进行了就地编辑(使用 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 时提供模型验证。我不清楚如何使用它来处理验证成功时“保存”失败的一般情况。

【问题讨论】:

您是否曾经修补过 jquery.rest_in_place.js 以支持验证?还是你最终放弃了休息? 我放弃了 janv 的 rest_in_place Rails 插件。作者承认需要和缺少对验证的支持。我尝试了另一个用于就地编辑的 Rails 插件,rubymood 的 jintastic,但无法让它按照我想要的方式工作。最后,我直接在我的 Rails 应用程序中使用了 tuupola 的 jquery_jeditable jQuery 插件(没有 Rails gem 或插件)。我在 lperichon 的sadhana 项目中找到了一个很好的示例实现(带有一个有用的视图助手)。 【参考方案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

【讨论】:

上周我给插件的作者发了电子邮件,但没有回复:-(我尝试了你的建议,但到目前为止这种方法没有成功。

以上是关于如何使用 JSON 和 jQuery 在 Rails 2.3.5 中显示服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时使用 jquery 创建 json 对象数组?

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

如何使用 jQuery 显示来自 JSON 的多个数组?

性能优化-使用 RAIL 模型评估性能

如何在 jQuery 中解析 JSON 数组?

如何修复 JSON、jQuery、AJAX 和 PHP 之间的错误