问题很简单:从控制器返回错误作为JSON响应:
//controller
def action1
# .....
return render(json: { status: :unprocessable_entity }) if !is_my_valid?
# .... doing something
render(json: my_hash.to_json)
end
//view
$.ajax({
url: 'some_url',
//...
}).done(function(data) {
// it always gets here even in case of an error
}).fail(function(jqXHR, textStatus) {
alert("error: " + textStatus);
});
所以问题是在HTML页面上,即使出现错误,也会执行.done()
中的回调函数,而不是.fail()
中的回调函数。如何将其变为.fail()
?
答案 0 :(得分:2)
发回500 HTTP状态代码:
render(json: { ... }, status: 500)