2010-12-22 16 views
4

当我的控制器操作没有成功时,我返回一个带有一些JSON数据的403,这样我可以包含失败的详细信息(例如ActiveRecord错误)。问题是,响应内容(如Chrome开发人员工具中所示)似乎是空的。如何在Rails的403响应中返回内容?

即使请求的操作失败,我是否应该返回200,然后检查'ajax:success'事件处理程序中的JSON数据?这似乎有点奇怪。理想情况下,我想访问'ajax:error'处理程序中的数据。

我是新来API风格的编程,所以我不知道最佳实践。

回答

3

我不知道这是不是最好的做法或没有,但我已经做到了这种方式:

在控制器中,如果发生错误:

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,因为这是最接近的比赛。

+0

它看起来像你使用的前jQuery 1.4.3 rails.js(较新的有ajax:错误)。我想知道这是我的问题吗?另一个区别是我返回了403状态。我会尝试你的例子,看看它是否有效。谢谢。 – dzajic 2010-12-24 17:10:04

相关问题