Javascript 可以在ExtJS中将XML响应作为流读取吗

Javascript 可以在ExtJS中将XML响应作为流读取吗,javascript,ajax,http,extjs,streaming,Javascript,Ajax,Http,Extjs,Streaming,我有一个生成XML响应的请求。由于当前的某些限制,响应完成可能非常缓慢,但确实开始快速返回数据 是否可以在响应完成之前读取ExtJS中的响应流?我的理解是,*读者只会在回复文本完成后收到回复。似乎没有一个Ext.Proxy,我认为这很难编写。首先,您需要编写Sax解析器来理解不完整的XML文档。然后,您需要编写一个代理,在新数据通过时重复执行操作。ExtJS并不是专门为此而设计的,但这将是一个有趣的尝试。不过,我不确定这会有多实际;任何实现的Ext.代理的行为都与其他代理截然不同;虽然它可能有同

我有一个生成XML响应的请求。由于当前的某些限制,响应完成可能非常缓慢,但确实开始快速返回数据


是否可以在响应完成之前读取ExtJS中的响应流?我的理解是,*读者只会在回复文本完成后收到回复。

似乎没有一个Ext.Proxy,我认为这很难编写。首先,您需要编写Sax解析器来理解不完整的XML文档。然后,您需要编写一个代理,在新数据通过时重复执行操作。ExtJS并不是专门为此而设计的,但这将是一个有趣的尝试。不过,我不确定这会有多实际;任何实现的Ext.代理的行为都与其他代理截然不同;虽然它可能有同名的方法,但它将是一个非常不同的接口。您必须扩展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);

    }
});

干杯@zetlen,你是对的,这不值得我花时间,但我接受你的答案,因为它是一个很好的指针,告诉我如何着手解决这个问题。