XMLHttpRequest()&net :: ERR

我正在编写一个JavaScript应用程序,它可以发出远程服务器的HTTP请求。 用户将输入主机名称。

如果输入无法解析的DNS名称,我想提供诊断消息。 这是当前的代码:

var req, t, url;
url = 'http://definitelydoesntexist0x314159.com';
req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function() {
  if (req.readyState == 4) {
    t = req.statusText;
  }
};
req.send();

在onreadystatechange函数中,req的status = 0,response是“”,所以没有太多的错误指示。 但是控制台显示“无法加载资源:net :: ERR_NAME_NOT_RESOLVED”,因此浏览器(Chrome)能够找出发生的事情。

我如何得到ERR_NAME_NOT_RESOLVED的指示?

更新:我回到了这个问题,使用的策略是,任何不是'超时'的响应都意味着名称已解决,主持人应答等。

我原来的问题的答案似乎是:看起来,浏览器本身(在这种情况下,Chrome)检测到解决失败并显示在控制台中,但XMLHttpRequest API不够丰富,无法指出原因。 所以这个可怜的Javascript程序员被困在超时时间之内。

我还删除了CORS标题,正如其中一位正确提到的评论者没有任何价值。


经过大量的研究后,我更清楚地理解了这个问题,并理解了答案(不,不可能在错误状态中得到原因 - 例如ERR_NAME_NOT_RESOLVED)。

这是设计。 Javascript错误处理例程不会,也不能返回关于失败原因的更多信息。 浏览器这样做是为了防止恶意的Javascript代码在本地网络上运行端口扫描程序并将该信息发送到远程服务器。

我在Chromium bug记者的报告和其中一位开发人员的回复中可以清楚地看出这一点,特别是:https://bugs.chromium.org/p/chromium/issues/detail?id = 718447特别是评论#2 。

因此,窗口中的JavaScript运行在沙箱中,只能访问加载,超时,中止和错误状态,而没有任何进一步的粒度。 (但是浏览器的调试环境可以显示这些信息,所以你可以弄清楚出了什么问题......)

链接地址: http://www.djcxy.com/p/22313.html

上一篇: XMLHttpRequest() & net::ERR

下一篇: chrome 401 unauthorized javascript login