2012-11-12 15 views
8

私のBackbone.jsベースのアプリケーションでは、無効な認証トークンを使用せずに、または無効な認証トークンを使用して基礎となるリクエストが行われた場合に、 401を受け取るたびに#loginページに移動して計測したいと思います。Backbone.jsベースのアプリケーションで401をきれいにフェッチする方法

401を取得するには、私は正常にBackbone.syncをラップしましたが、その時点では固くなっています。同期::バックボーンにおけるダウン

  1. throw 'unauthorized'を、私のルータで、最大フェッチしよう:私はここにいくつかの戦略を試してみました。失敗しました: 'Uncaught unauthorized'

  2. 私は、バックボーン::同期で、奇妙に見えるだけでなく、自分のアプリがAMD/require.jsに基づいており、私のバックボーンにアクセスできないという問題が発生しています。ラップされたsync関数のインスタンスを下に移動します。

私がこれまで見唯一の解決策は、私のルータインスタンスへの参照を取得し、今度はそれが必要とされている依存性としてdefineに入れられる「グローバルに使用できる」キャッシュオブジェクトを作成することです。そのキャッシュオブジェクトはシングルトンでなければならず、私の全体的な「すばらしいグローバルではなく名前空間ではない」戦略を破りました。

私はここにこだわっています。誰も私にその共通の問題に対するよりクリーンな解決策を教えてもらえますか?

答えて

8

あなたはajaxErrorでリダイレクトを行うことができます。

$.ajaxError(function (event, xhr) { 
      if (xhr.status == 401) 
       window.location = '#login'; 
     }); 

をすべてがセットアップされている場合は、適切に手動でルータのインスタンスにアクセスする必要はありません。そのURLに行くと、それに関連付けられたルート機能が起動されます。 jQueryの1.8以上を使用してそれらのために

+0

未確認です。私は同じウィンドウを行うことができます。場所= ...同期して、その応答を取得します。良いアイデア。私はルータを使用する必要があるきれいなアプローチを考えました。しかし、それは良い解決策のように思えます。ありがとうございましたAnrei – GeorgieF

3

、構文が変更されました:

$(document).ajaxError(function (event, xhr) { 
     if (xhr.status == 401) 
      window.location = '#login'; 
    }); 

の詳細についてはjQuery manualを参照してください。

+0

[doc](http://api.jquery.com/ajaxerror/)に、1.9以降のことが言及されていますか? –