當我的控制器操作沒有成功時,我返回一個帶有一些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