我有以下问题:
我有一个文本框,我在点击输入按钮时获取文本框的值,我想捕获没有名称的错误。所以我把它添加到我的模型中:
validates :name, presence: true
在我的控制器中,我只更改了保存成功后应该发生的事情:
def create
@role = Role.new(role_params)
respond_to do |format|
if @role.save
format.js { render :created }
else
format.json { render json: @role.errors, status: :unprocessable_entity }
end
end
end
我的JavaScript文件有这个功能:
$(function(){
$("body").on("keyup", "#role_name", function(e){
if ( e.which == 13 ) {
role_name = $("#role_name").val();
$.ajax({
type: "POST",
dataType: "script",
url: '/roles',
data: {role: {name: role_name} },
success: function(){
$("#role_name").val("");
$("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-success col-xs-10 col-xs-offset-1'><strong>role created!</strong></div>");
}
}).fail(function(){
$("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-danger col-xs-10 col-xs-offset-1'><strong>name can't be empty!</strong></div>");
});
}
});
})
这实际上有效,但我的错误信息是硬编码的。我是否应该添加第二个验证规则,我无法确定究竟是什么原因导致错误。
Firebug向我展示了由控制器创建的JSON,但不知怎的,我无法从jQuery中的.fail函数中访问它。
我检查了所有4个参数但没有包含我的错误信息。
我找到了几个应该如何做的例子,但不知怎的,我无法重现它。
如果我可以访问JSON,那么在rails中渲染部分并将其传递回.fail函数也是一个想法。
答案 0 :(得分:1)
这是我使用的,应该很容易扩展到error
上的一系列html警告和一个switch语句,或只是一个带有错误插入值的html字符串:
$.ajax({
type: "POST",
url: "page.php",
data: dataString,
success: function() {},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
console.log(err.Message);
console.log('xhr: ');
console.log(xhr);
console.log('status: ' + status);
console.log('error: ' + error);
}
});
您可以通过错误功能中的xhr对象访问所需的数据,如下所示(右键单击并在新选项卡中打开图像以获得更好的外观):