2012-04-20 10 views
1

すべての応答エラーステータスコードを取得し、私は302エラーをキャッチし、私のログインページにリダイレクトしたいのですが、今xhr.statusは200最後に

のステータスコードを取得していることはここでは私だbackbone.sync現在のコード:

parentSyncMethod = Backbone.sync 
Backbone.sync = (method, model, options) -> 
    old_error = options.old_error 
    options.error = (xhr, text_status, error_thrown) -> 
    if(xhr.status == 302) 
     window.location.replace('http://localhost:8080/login') 
    else 
     old_error?(xhr, text_status, error_thrown) 
    parentSyncMethod(method, model, options) 

は基本的に私はこの問題は、現在のWebページが200エラーを投げているが、302を投げ1が包まれているとxhr.statusに伝播しないということだと思います。 get、post、putなどのすべての状態コード応答を取得する方法はありますか?

+0

同期オーバーライドに投票しました:) – lucke84

答えて

5

302レスポンスコードはブラウザによって自動的にリダイレクトされるため、そのレスポンスを取得することはできません。あなたのハンドラは、リダイレクトされたURLからデータが戻ったときにのみ実行されます。

ここで302を使用する代わりに、おそらく200を返すだけで、応答データが独自の方法でリダイレクトを送信する必要があります。

+0

しかし、このレスポンスをキャッチしているブラウザはありません。キャッシュしているのはjQuery.ajaxです。誰がリダイレクトを管理していますか? – fguillen

+0

@fguillen 302リダイレクトは透過的に処理されるため、レスポンスは表示されません。 jQueryは要求を行うためのブラウザ関数を呼び出します。応答が返ってくると、ブラウザは302のステータスを見て、 'Location'ヘッダーを見て、代わりにそのURLへの新しいリクエストを開始します。そのリクエストが戻ってくると、ハンドラが実行されます。 – loganfsmyth

+0

私は参照してください..説明のためにありがとう – fguillen