可以在Ext JS中将XML响应读作流

时间:2012-04-05 03:40:58

标签: javascript ajax http extjs streaming

我有一个生成XML响应的请求。由于某些存在的约束,响应可能很慢完成,但确实开始快速返回数据。

在响应完成之前,是否可以在Ext JS中读取响应流?我的理解是*Readers只有在完成后才会给出响应文本。

1 个答案:

答案 0 :(得分:0)

似乎没有Comet techniques的Ext.Proxy,我认​​为写起来很难。首先,您需要编写一个Sax解析器来理解不完整的XML文档。然后,您需要编写一个代理,在新数据通过时重复执行操作。 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);

    }
});