gpt4 book ai didi

javascript - Opera 中的 XMLHttpRequest readyState == 3

转载 作者:行者123 更新时间:2023-11-30 06:53:32 26 4
gpt4 key购买 nike

我的应用程序为客户提供了即时的部分响应,而不是让他们等待整个响应完成。

除 Opera 外,所有主流浏览器都能正确处理部分响应。

这是发生了什么:

在处理部分响应(又名 readyState 3)的每一行代码上都设置了断点,如下所示:

if (this.readyState == 3) {
$(".serverResponse").html(xhr.responseText); // Breakpoint set up here
}

每个主要的浏览器都在每次执行 xhr.onreadystatechange 时,一个一个地抓取这些 block ,并将它们填充到 xhr.responseText 中(也在 xhr.response 上,但这不在问题之内),以便客户端可以逐渐看到响应在任意元素上的进度,为此我给出了一个 serverResponse 类。所以 serverResponse 像这样增长:

response1
response1 response2
response1 response2 response3
etc...

现在,Opera 做什么?

Opera 在第一次运行 xhr.onreadystatechange 时获取了整个响应。第一次运行后serverResponse已经是这样了:

response1 response2 response3

这就像 Opera 不等待任何部分响应,或者根本不关心任何响应。它似乎无缘无故地运行 xhr 函数。

为什么会这样?

因为如果我删除断点,serverResponse 将不会得到任何写入的响应。但是,如果我添加断点并且不让脚本运行几秒钟,那么整个响应都写在 serverResponse 上。

这一切似乎都是 Opera 的某种奇怪行为,我怀疑这是一个缓存问题。

有没有办法让 Opera 的行为与其他浏览器一样?

编辑:为了让事情更清楚,Opera 仍然逐渐获取响应,但它似乎没有通知 xhr.onreadystatechange 这一变化。所有主流浏览器都会捕获他们看到的第一件事,然后停在断点处,一旦我让脚本继续运行,就等待下一个 block 。

他们还多次运行 xhr.onreadystatechange 函数(主流浏览器似乎让这个函数在服务器有可用的新 block 时立即循环运行)直到服务器结束响应。 Opera 只运行一次函数,它似乎根本不想等待任何响应,这解释了为什么如果我让断点激活几秒钟,然后让脚本再次运行,serverResponse 只会在其上写入文本.

最佳答案

我不想回答我自己的问题,但无论如何...

问题的出现是因为我使用的是旧版本的 Opera(准确地说是 12.17)。我得到了 Opera 22,它现在可以像其他主要浏览器一样处理部分响应。现在最重要的是检查更改日志,看看他们何时解决了这个特定问题,但我不会为此烦恼。

最新的浏览器解决了很多问题。保持浏览器更新!

关于javascript - Opera 中的 XMLHttpRequest readyState == 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713275/

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