我想要的是
我使用新的rails respond_to Controller Api和ajax表单.
如果对象未验证rails,则返回Json错误对象并触发“ajax:error”事件.
我想在相应的表单字段下面/下面显示每个错误(我们使用的是formatastic).
这是我的例子..
控制器:
class Admin::PrivateMessagesController < AdminController
respond_to :json
def create
private_message = PrivateMessage.new(params[:private_message])
private_message.save
respond_with private_message
end
end
视图
<%= form_for @private_message, :remote => true, :html => {"data-type" => "json"} do |f|
f.input :body
...
end %>
JS /的CoffeeScript
我只是将所有错误添加到字符串并显示它们..
$("#new_private_message").on 'ajax:error', (event, data, status) ->
error = "Errors: "
$.each $.parseJSON(data.responseText), (field, errorMessage) ->
error += "#{field}-#{errorMessage} "
$('#errors').html(error)
json错误对象
{"body":["Please enter a message."],"subject":["Please enter a message."]}
我的问题!
>我自己要解析json吗?
>如何将错误消息添加到字段中?
>它不应该是标准jquery-ujs的一部分吗?
最佳答案 我必须自己解析json吗?
是的,jQuery Ajax API不会自动解析错误响应.你必须自己做.
如何将错误消息添加到字段?
以下是如何处理错误的一个非常快速的示例:http://jsfiddle.net/hpM6W/
虽然需要更详尽的解决方案.例如,我提供的样本提交了两次,看看会发生什么……
有许多工具包和库可用于富客户端验证和错误消息的呈现.我强烈建议您查看jQuery Validation Plugin以开始表单验证.您应该仍然是always do server side validation并返回任何错误.
我过去所做的是一个混合模型,我会做客户端验证,以方便用户(更好的用户体验),并使用jQuery Validation Plugin通过showErrors呈现服务器端验证的结果方法.
这是一个快速示例:http://jsfiddle.net/GNq84/,介绍如何使用showErrors显示来自服务器端验证的结果错误消息.请注意,通过此示例,多次提交效果会更好.
但有一点需要注意,showErrors预计会出现如下错误:{“element”:“message”}而不是你当前的错误:{“element”:[“message1”,“message2”]},但我会把它留给你来解决:)