我正在使用一些客户端JavaScript代码通过HTTP GET从Web服务器提取大量JSON数据。数据量可能很大,例如50
MB。这是在LAN上,因此这不是什么大问题,但仍然需要十秒钟左右。
为了使我的界面更具响应性,我想分块处理响应,并在UI可用时立即在UI中显示数据(例如,每MB或每秒)。浏览器兼容性不是问题。只要它可以在最新的Chrome和Firefox上运行,就可以了。但是,我无法修改服务器代码。
是否可以使用XMLHttpRequest或WebSockets或其他我从未听说过的技术来做到这一点?
XMLHttpRequest.responseText
当状态为时,它不是显式为空LOADING
:
responseText属性必须返回运行以下步骤的结果:
- 如果状态不是LOADING或DONE,则返回空字符串并终止这些步骤。
- 返回文本响应实体主体。
但是我认为缓冲会在此过程的各个阶段进行,所以如果我设置了一个定期轮询的计时器,它将起作用responseText
吗?
据我所知,WebSocket在服务器端也需要特殊的协议,因此这些协议已经淘汰了。
限制:我无法修改服务器代码。
想要将其发布为评论,但评论文本区域有些限制
服务器现在是分块发送数据还是是一个连续流?如果将处理程序添加到xmlHttpRequestInstance.onreadystatechange
多久触发一次?如果的xmlHttpRequestInstance.readystate
值为3,则可以获取的当前值xmlHttpRequestInstance.responseText
并跟踪长度。下次readystate更改时,您可以通过从该点开始获取所有新数据来获取最新数据。
我尚未测试以下内容,但希望它足够清楚:
var xhr = new XMLHttpRequest();
var lastPos = 0;
xhr.onreadystatechange = function() {
if(xhr.readystate === 3) {
var data = xhr.responseText.substring(lastPos);
lastPos = xhr.responseText.length;
process(data);
}
};
// then of course do `open` and `send` :)
当然,这取决于onreadystatechange
事件触发。这将在IE,Chrome,Safari和Firefox中运行。
在服务器端,我正在使用一个HTTP API,它以页面形式返回结果。如中所示,响应包含x个结果,如果有超过0的结果,我可以再次调用它以获得下一个x个结果。x可以任意选择直到API的最大页面大小。 现在,我想要在WebSocket上高效地流式传输全套结果,而不会使它不堪重负(施加背压)。最初,我构建了整个resultset,然后从中创建了一个源代码: 这样可以工作,WebSocket客户机以其最大速度
我正在使用Redux工具包的反应,但我正在unbale访问响应头
问题内容: 什么是空指针异常(),什么原因导致它们? 可以使用哪些方法/工具确定原因,以阻止异常导致程序过早终止? 问题答案: 声明引用变量(即对象)时,实际上是在创建指向对象的指针。考虑以下代码,您在其中声明基本类型的变量: 在此示例中,变量是an ,Java会为您初始化它。在第二行为其分配值时,您的值将写入所指的存储位置。 但是,当您尝试声明引用 类型时 ,会发生一些不同的事情。采取以下代码:
问题内容: 我检查了这个问题,它解决了我的最初问题。但是我不希望仅当用户单击链接时才显示部分视图,我希望在页面加载时显示部分视图,并且可能在加载部分视图时显示进度指示器。 如何实现? 非常感谢您阅读本文。 问题答案: 如果要加载页面,然后通过ajax加载部分视图,则可以创建一个执行以下操作的对象: 然后在您的页面中执行以下操作:
问题内容: 我最近开始用PHP编写大量AJAX支持的脚本代码,事实是,也可以直接使用AJAX调用访问的文件,如何禁用它? 问题答案: 您不能可靠地阻止这种情况的发生。真正的关键是不要将某人直接访问此文件作为安全问题-计划这样做是可能的,您将处于一个安全得多的地方。 有人可能会推荐看起来像这样(或相似)的代码: 但是,事实是HTTP标头很容易被欺骗,并且不是保护代码的手段。在一段时间的繁忙站点上进行