1

据我了解,阻止 URL 的本地(或本地网络)防火墙将阻止对该 URL 的 Ajax 请求达到 ReadyState 4。这是正确的吗?

4

1 回答 1

1

是的,它会的。例如,看看这段代码。

function readyStateCallback () {
  jsprint(this.readyState);
};

var oReq = new XMLHttpRequest();
oReq.onreadystatechange = readyStateCallback;
oReq.open("get", "http://foobarbaz.nnn", true);
oReq.send();

你可以在这个 fiddle上试试。每个请求都会触发就绪状态 1 和 4,但不一定触发就绪状态 2 或 3。

请参阅XMLHttpRequest MDN 文档。

0   UNSENT               open() has not been called yet.
1   OPENED               send() has not been called yet.
2   HEADERS_RECEIVED     send() has been called, and headers and status are available.
3   LOADING              Downloading; responseText holds partial data.
4   DONE                 The operation is complete.

要确定请求是否失败(例如被防火墙阻止),请检查 this.status。对于一个好的请求,这将是 200。对于没有收到响应的请求,它将是 0。

status 属性必须返回运行这些步骤的结果:

  1. 如果状态为 UNSENT 或 OPENED,则返回 0 并终止这些步骤。
  2. 如果设置了错误标志,则返回 0 并终止这些步骤。
  3. 返回 HTTP 状态码。

来源:W3 XMLHttpRequest::status

网络错误描述为,

DNS 错误、TLS 协商失败或其他类型的网络错误 它还讨论了在发生错误时触发 onreadystatechange 事件。就绪状态将为 4。

防火墙通常要么禁止 DNS 解析,要么禁止 TLS 数据包成功发送。

于 2013-08-28T15:02:28.487 回答