gpt4 book ai didi

javascript - 使用 AJAX 或 WebSockets 访问部分响应?

转载 作者:数据小太阳 更新时间:2023-10-29 05:20:00 24 4
gpt4 key购买 nike

我正在使用一些客户端 JavaScript 代码通过 HTTP GET 从网络服务器中提取大量 JSON 数据。数据量可能很大,例如 50 MB。这是在 LAN 上,所以问题不大,但仍需要十秒左右。

为了让我的界面更具响应性,我想分块处理响应,一旦数据可用就在 UI 中显示数据(比方说,每 MB 或每秒)。浏览器兼容性不是问题;只要它适用于最新的 Chrome 和 Firefox,就没问题。但是,我无法修改服务器代码。

是否可以使用 XMLHttpRequest 或 WebSockets 或其他一些我从未听说过的技术来做到这一点?

XMLHttpRequest.responseText 在状态为 LOADING 时未明确为空:

The responseText attribute must return the result of running these steps:

  1. If the state is not LOADING or DONE return the empty string and terminate these steps.
  2. Return the text response entity body.

但我想缓冲会在整个过程的不同阶段发生,所以如果我设置一个计时器来定期轮询 responseText 是否会起作用?

据我所知,WebSockets 在服务器端也需要一个特殊的协议(protocol),所以那些已经过时了。

限制:我不能修改服务器代码。

最佳答案

想将此作为评论发布,但评论文本区域有点限制

此时服务器是分块发送数据还是连续发送数据流?如果您向 xmlHttpRequestInstance.onreadystatechange 添加处理程序,它多久被触发一次?如果 xmlHttpRequestInstance.readystate 的值为 3,那么您可以获得 xmlHttpRequestInstance.responseText 的当前值并跟踪长度。下次就绪状态发生变化时,您可以通过从该点开始获取所有新数据来获取最新数据。

我没有测试以下内容,但希望它足够清楚:

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。

关于javascript - 使用 AJAX 或 WebSockets 访问部分响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952448/

24 4 0
文章推荐: javascript - 拉斐尔 JS : how to change the color of certain letters within a text-element?
文章推荐: javascript - JS : Confusion about inheritance
文章推荐: javascript - 为什么 Eclipse 有时会对 JavaScript 中的数组数组发出警告?
文章推荐: javascript - 使用 JavaScript 或 jQuery,如何在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com