当我的控制器操作没有成功时,我返回一个带有一些JSON数据的403,这样我可以包含失败的详细信息(例如ActiveRecord错误)。问题是,响应内容(如Chrome开发人员工具中所示)似乎是空的。如何在Rails的403响应中返回内容?
即使请求的操作失败,我是否应该返回200,然后检查'ajax:success'事件处理程序中的JSON数据?这似乎有点奇怪。理想情况下,我想访问'ajax:error'处理程序中的数据。
我是新来API风格的编程,所以我不知道最佳实践。
当我的控制器操作没有成功时,我返回一个带有一些JSON数据的403,这样我可以包含失败的详细信息(例如ActiveRecord错误)。问题是,响应内容(如Chrome开发人员工具中所示)似乎是空的。如何在Rails的403响应中返回内容?
即使请求的操作失败,我是否应该返回200,然后检查'ajax:success'事件处理程序中的JSON数据?这似乎有点奇怪。理想情况下,我想访问'ajax:error'处理程序中的数据。
我是新来API风格的编程,所以我不知道最佳实践。
我不知道这是不是最好的做法或没有,但我已经做到了这种方式:
在控制器中,如果发生错误:
render :new, :status => :bad_request
new.js. erb是原始视图,包括显示错误的表单。
JavaScript的:
$('#the_form').live('ajax:failure', function(evt, xhr, status, error) {
if (xhr.status == 400) {
alert(xhr.responseText);
} else {
alert('Generic error message');
}
});
滑轨发送500(:INTERNAL_SERVER_ERROR)时的异常升高。 JavaScript中的其他部分涵盖了这些内容,但正如您所见,在这种情况下,您不会有机会返回错误或重新呈现表单。我必须使用不同的状态代码,以便呈现内容,但仍然遇到ajax:failure事件。
这是list of status code mappings。我选择了400,因为这是最接近的比赛。
它看起来像你使用的前jQuery 1.4.3 rails.js(较新的有ajax:错误)。我想知道这是我的问题吗?另一个区别是我返回了403状态。我会尝试你的例子,看看它是否有效。谢谢。 – dzajic 2010-12-24 17:10:04