gpt4 book ai didi

javascript - 可以在 Ext JS 中将 XML 响应作为流读取吗

转载 作者:行者123 更新时间:2023-11-28 09:55:55 25 4
gpt4 key购买 nike

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

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

最佳答案

Comet techniques 似乎没有 Ext.Proxy ,而且我认为写起来会非常困难。首先,您需要编写一个 Sax 解析器来理解不完整的 XML 文档。然后,您需要编写一个代理,以便在新数据通过时重复执行操作。 ExtJS 并不是真正为此而设计的,但尝试一下会是一件有趣的事情。不过,我不确定它有多实用;任何实现的 Ext.Proxy 的行为都与其他代理有很大不同;尽管它可能具有相同名称的方法,但它会是一个非常不同的接口(interface)。您必须扩展 Ext.Model 和 Ext.Store 以了解如何使用流数据填充自身,为 block 事件编写新的监听器以及为 Stores 和 Models 的消费者编写新的数据契约。我不确定这是否值得您花时间!

但是,如果您需要的只是在流 block 通过时抛出一个事件,那么这在 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);

}
});

关于javascript - 可以在 Ext JS 中将 XML 响应作为流读取吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com