5

ユーザー固有のデータセットを使用して Sencha Touch 2 アプリケーションを構築しています。

アプリのアーキテクチャ:

Sencha Touch アプリ <=====> REST サービスを使用した Java サーバー バックエンド (多数の AJAX リクエスト =) )

私が実際に持っているものは次のとおりです。

  • ユーザー名/パスワードを使用してユーザーにログインします

    アプリが初期化され、ログインフォームが機能します。フォームを AJAX リクエストとして送信した後、サーバー バックエンドはユーザーデータをチェックし、クライアント コールバック関数を呼び出します。

そして、私がやりたいことは次のとおりです。

わかりました、問題にはなりません。

しかし、どうすれば次のことを達成できますか:

ほとんどのデータは1 人のユーザーに固有であり、必要に応じて (ナビゲーションをクリックするなどして) REST サービスによって返される必要があります。すべてのAJAXリクエスト内でセッショントークン(上記を参照)を送信するにはどうすればよいですか-サーバーは適切なデータセットを提供できます(トークンが有効であると仮定)?

AJAX リクエスト内で Cookie を送信する

URLが同じスペースにある場合、Cookieがリクエストに自動的に追加されることをすでに読みましたよね?Java サーバーは同じドメイン (localhost:8080) にありますが、「app.json」などの URL に対する要求ではなく、Cookie を使用できません。クロスドメインリクエストは本当にドメイン固有のものだと思いましたか?

AJAX リクエスト内でパラメーターを送信する

Cookie は avi ではないため、「手動で」パラメータを ajax リクエストに追加する可能性について考えました。アプリには多くの AJAX リクエストが含まれるため、トークンを手動で追加したくないのです - Ext.Ajaxのリクエスト機能をオーバーライドしようとしましたが、失敗しました ;-( :

(function() {
    var originalRequest = Ext.data.Connection.prototype.request;

    Ext.override(Ext.data.Connection, {
        request : function(options) {
            alert("Do sth... like add params");
            return originalRequest.apply(this, options);
        }
    });
})();

エラー:

キャッチされないエラー: [エラー][Ext.data.Connection#request] URL が指定されていません

リスナーも追加しようとしました

Ext.Ajax.add({
    listeners : {
        beforerequest :  function( conn, options, eOpts ){
           alert("Do sth... like add params");
        }
     }
});

エラー:

キャッチされていない TypeError: オブジェクト [オブジェクト オブジェクト] にメソッド 'add' がありません

トークンを追加する方法について何か考えはありますか?

または、これらのケースを処理するより良い方法はありますか?

ありがとう!

4

1 に答える 1

9

最後に、私は正常に使用しました:

function addAjaxInterceptor(context)
{
   Ext.Ajax.on('beforerequest', function(conn, options, eOptions)
   {
      // add the param to options...
   }, context);
}

アプリから実行 (=> addAjaxInterceptor(this))。

しかし、次の解決策は私の状況により適していると思います:

Ext.Ajax._defaultHeaders = {
    // params as json
};

(Ext.Ajax はシングルトン オブジェクトであり、リクエストごとにパラメーターを変更しないため)

于 2012-08-20T11:28:30.617 に答える