2010-12-22 19 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

相關問題