2013-05-11 30 views
0

當用戶想執行需要他登錄在第一,設計將他重定向到登錄頁面,並設置提示信息的行爲:「請簽到或註冊之前繼續」 。這在沒有Ajax請求的情況下運行良好。當收到401錯誤色器件與Ajax請求打交道時設計沒有設置閃光燈消息

$.ajax({            
url: '/books/user_score',       
type: 'POST',          
data: { score: value, book_id: book_id },   
dataType: 'json',         
success: function(data) {       
    bookStarWidget.data('starInfo', data.book_star); 
    setVote(bookStarWidget);       
    $("[name='my_vote']").rating('disable');   
},             
error: function(jqXHR, textStatus, errorThrown) { 
    if (jqXHR.status == 401) {      
    window.location.assign('/users/sign_in');  
    }            
}             
});        

在上面的代碼中,我們手動打開登錄頁面:但也需要先簽到一個Ajax請求,它會迴應與401錯誤,我們需要手動處理它如下發出。 的問題是,有這樣設置不閃光消息。那麼有人可以像往常一樣瞭解如何設置Flash消息以保持一致的行爲?

回答

1

它看起來像你使用JavaScript來設定錯誤的情況下的位置。 Devise有一個配置選項,它會在失敗時重定向,而不是返回http頭。此設置默認爲true,這迫使您手動在xhr上處理故障。下面是從源頭上解釋:https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb#L120

所以,在你設計的配置:

config.http_authenticatable_on_xhr = false 

再次嘗試未經認證的Ajax請求,並設計將做重定向對你來說,這應該設置閃光燈的消息,你期望。

+0

我設置的配置如你所說。是的,設計將執行重定向到登錄頁面。但AJAX'成功:功能(數據)'也被稱爲(在'data'param是整個登錄HTML頁面)與200個狀態。所以當前頁面保持不變,登錄頁面沒有顯示。那麼如何使當用戶真的登錄當時的成功Ajax回調只能叫什麼名字? – tomwang1013 2013-05-12 03:53:10