1

XML 応答を生成する要求があります。特定の現在の制約により、応答が完了するのが非常に遅くなる可能性がありますが、すぐにデータを返し始めます。

応答が完了する前に、Ext JS で応答ストリームを読み取ることは可能ですか? 私の理解では*Readers、応答テキストは終了後にのみ与えられます。

4

1 に答える 1

0

コメットテクニック用のExt.Proxyはないようです、そして私は1つを書くのはかなり難しいだろうと思います。まず、不完全なXMLドキュメントを理解するためにSaxパーサーを作成する必要があります。次に、新しいデータが届いたときに操作を繰り返し実行するプロキシを作成する必要があります。ExtJSは実際にはこのために設計されたものではありませんが、試してみるのは興味深いことです。しかし、それがどれほど実用的かはわかりません。実装されたExt.Proxyは、他のプロキシとは非常に異なる動作をします。同じ名前のメソッドがあるかもしれませんが、それは非常に異なるインターフェースになります。Ext.ModelとExt.Storeを拡張して、ストリーミングデータを入力する方法、チャンクイベントの新しいリスナーの作成方法、およびストアとモデルのコンシューマー向けの新しいデータコントラクトを作成する方法を理解する必要があります。あなたの時間の価値があるかどうかはわかりません!

ただし、必要なのがストリームチャンクが通過したときにスローされるイベントだけである場合、それはGeckoおよびWebKitブラウザーで可能です。XHRのonreadystateイベントにハンドラーをアタッチする必要があります。このイベントは、データが受信されるたびに発生します。

実験的に:

Ext.define('Ext.proxy.StreamEventedAjax',{
    extend: 'Ext.proxy.Ajax',
    doRequest: function(operation, callback, scope) {

        if (Ext.isIE) return null;

        // do other doRequest setup here, use this.buildRequest, etc

        var me = this,
            req = new XMLHttpRequest(),
            responseLength = 0,
            newText = "";
        req.onreadystate = function(e) {

           newText = req.responseText.substring(responseLength);
           responseLength = req.responseText.length;

           operation.fireEvent('datareceived',e,newText);

        }

        req.open(me.getMethod(request),request.url);

    }
});
于 2012-04-05T10:00:23.787 に答える