1

我正在使用 xmlhttprequest 从 google chrom 扩展向远程服务器发送请求

我在 manifest.json 中设置了访问远程主机的权限

基本上它按预期工作正常。我所期望的是readystate 4,它在响应完成时被触发。

由于这是服务器端 8 到 10 秒的过程,因此我使用从服务器端到客户端的 echo 进行状态更新。

所以我使用 readyState==3 条件来显示服务器响应

但是当我测试 readystate 1 和 4 时触发事件处理程序而不是 2 和 3

这是我使用的代码

var wini = window.open('','');
var sta='';
var jax = new XMLHttpRequest();
jax.onreadystatechange = function() {
    sta = sta + jax.readyState + ', '
    wini.document.write(sta+'<br>');

}
jax.open("POST","http://sitename.com/subscript/?save=save&tstamp="+Math.random());
jax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//jax.setRequestHeader("Connection: close");
jax.send("somedata=" + encodeURIComponent(window.somedata));

使用连接关闭。不同的结果。除了 readystate 1 没有其他人被解雇

所以,readystates 1 和 4 工作正常,但不是 2 和 3。最需要的是 3。

代码运行实际发生的是:

1,在弹出窗口中打印,然后经过 8 到 9 秒,当就绪状态为 4

1,2

1,2,3

1,2,3,4

以上三行是一次性打印出来的。所以我假设只有在 readystate 4 时我才能从服务器获得所有响应,而不是在 readystate 为 3 时。

我在其他同源的 Web 应用程序中使用了 readystate 3,它工作并且仍在工作。

对于这个 xhr,我不知道我错过了什么。

如何在这里使用 readystate 3?

4

1 回答 1

0

最后我发现只有在 chrome 和 safari 中它不起作用,因为 chrome 正在使用 safari webkit 并且可能是 webkit 不想像其他人一样工作。

添加了一个内容类型标题,它按预期工作

另一个用户有类似的问题,我一直在尝试并找到以下解决方案。

因为我的解决方案解决了这两个问题,所以我正在链接我已经在其他问题中给出的答案,而不是在这里复制它。

这是我的答案。

PHP Flush() 在 Chrome 中不起作用

于 2013-04-17T11:24:57.420 回答