如何在Rails中失败Ajax请求?
当用户单击特定项时,我使用jQuery的post方法更新数据库中的内容:
$.post("/posts/" + post_id + "/update_something", { some_param: some_value }, success_handler);
update_something
看起来像这样:
def update_something post = Post.find(params[:id]) post.update_attributes(:some_field => params[:some_param]) render :nothing => true end
问题是如果update_attributes
失败,请求仍然成功并执行success_handler
。
当update_attributes
失败时,如何导致请求失败,以至于不会执行success_handler
?
您可以在Rails中执行render :status => 400
(或其他一些错误代码),这将触发$.ajax()
的error
回调,或者您可以使用错误消息呈现一些JSON:
render :json => { :success => false }
然后在您的success_handler
函数中,您将:
function success_handler (response) { if (response.success) { // do stuff } }
编辑:
哦, update_attributes
失败时返回false。 因此,您可以基于此呈现您的回复。
2年后编辑:
几年后看到这有几个upvotes,我强烈建议使用status: 400
方法而不是渲染200
。 它是AJAX请求中的error
处理程序的用途,应该以这种方式使用。
好吧,你必须添加一个error handling程序,并给它一个错误来处理。 所以,在你的JavaScript中:
$.post( "/posts/" + post_id + "/update_something", { some_param : some_value } ) .done( successHandler ) .fail( errorHandler ) // define errorHandler somewhere, obviously ;
在Rails中:
def update_something post = Post.find params[ :id ] success = post.update_attributes :some_field => params[ :some_param ] head success ? :ok : :internal_server_error end
注意:此处500
可能是或可能不是相应的错误代码 – 选择400和500之间的适当值。