2

Ext.Ajax.request() を使用して Comet ソリューションを実装したので、タイムアウトが発生したとき、または成功した応答が受信されたときに、同じ要求が再初期化されます。

    var http = {

    requestId: 0,
    request: function(timeout){

        Ext.Ajax.request({
            url: '/echo/json/',
            timeout: timeout || 10000,
            method: 'POST',
            scope: http,    // scoped to the http object
            params: {
                json: Ext.encode({ 
                    data: [
                        {
                            id: 1,
                            type: 'notification',
                            timestamp: Ext.Date.format(new Date(), 'timestamp'),
                            from: 1445261,
                            to: 1402804,
                            read: false,
                            important: true,
                            content: 'Lorem ipsum...'
                        } 
                    ]
                }),
                delay: 5
            },
            success: function(resp) {
                if (resp.status === 200){
                    console.log('success');                
                    this.request();   
                }
            },
            failure: function(resp, opts) {
                if (resp.timedout === true) {
                    console.log('failure');  
this.request();                       
                } else {                   
                }
            },
            callback: function(options, success, resp) {
                if (this.requestId === 0) {
                    this.requestId = resp.requestId;
                } 
            }
        }); 

    }

};

http.request();​

これを Ext JS MVC 内に実装し、ネイティブ プロキシを利用してサーバーからデータを取得し、モデルを介してストアにロードしたいと考えています。

ドキュメントを見ると、Ext.Ajax.request メソッドのように成功および失敗のコールバックにアクセスできないように見えるため、これを行う方法がわかりません。

Ext MVC アーキテクチャでロングポーリングを実装する方法を知っている人はいますか?

上記のコード例では、JSFiddle ajax JSON 応答エコーを利用しています。

http://jsfiddle.net/Dd8q4/

4

1 に答える 1

1

私が見る方法には、3つの方法があります。

  1. より興味深いもの、クリーンでおそらくより挑戦的なものは、接続を維持するためにプロキシ クラスを拡張することです。Flicker API で動作するプロキシ拡張の例があります ( sencha blog entry )。これは、開始するのに役立つ場合があります。

  2. 応答を手動で解析し、応答データから Model オブジェクトを作成して手動でストアに挿入します。

  3. Ajax リクエストの場合と同様に、store コールバック メソッドを使用してストアを永続的にロードします。コールバック関数を使用してストアをロードする例については、ストア APIの動的ロード セクションまでスクロールします。またload、データが読み取られた後に起動するイベント リスナーもあります。

于 2012-12-05T02:51:25.033 に答える