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时,它适用于模型验证.我不清楚如何使用它来处理验证成功时"保存"失败的一般情况.
我认为你最好的选择可能是在这种情况下破解插件,因为插件没有错误处理程序确实很愚蠢。提示:也许告诉插件的作者,处理错误会很好而且很有用(如果连接失败或发生任何事情怎么办?插件永远不会知道并且不会向用户提供反馈)。
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)
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |