据我了解,阻止 URL 的本地(或本地网络)防火墙将阻止对该 URL 的 Ajax 请求达到 ReadyState 4。这是正确的吗?
问问题
534 次
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 属性必须返回运行这些步骤的结果:
- 如果状态为 UNSENT 或 OPENED,则返回 0 并终止这些步骤。
- 如果设置了错误标志,则返回 0 并终止这些步骤。
- 返回 HTTP 状态码。
网络错误描述为,
DNS 错误、TLS 协商失败或其他类型的网络错误 它还讨论了在发生错误时触发 onreadystatechange 事件。就绪状态将为 4。
防火墙通常要么禁止 DNS 解析,要么禁止 TLS 数据包成功发送。
于 2013-08-28T15:02:28.487 回答