定位HTTP错误消息

时间:2017-01-10 04:16:34

标签: javascript ajax http

我正在尝试使用AJAX将JSON编码的数据字符串发送到远程计算机。 每当我尝试将数据字符串发送到远程计算机时,都会出现以下两条错误消息之一:

XMLHttpRequest cannot load http://10.1.0.139:8000/. 
No 'Access-Control-Allow-Origin' header is present on 
the requested resource. Origin 'http://localhost' is 
therefore not allowed access.

远程计算机启动并接受连接时会出现此消息。但是,虽然我收到此错误,但我的代码正如我所希望的那样工作 - 就像在远程机器上接收正确的数据一样。

POST http://10.1.0.139:8000/ net::ERR_CONNECTION_REFUSED

当远程计算机关闭电源或没有自己运行的服务器接受传入请求和连接时,会出现此消息。

问题是,我希望能够区分这两个错误消息,我不知道如何。我不能使用诸如error()或fail()之类的AJAX回调,因为总会有错误 - 并且它会说尽管HTTP状态为200表示一切都没问题(当第一条错误消息显示)。

有没有办法可以做类似于'如果我无法连接到远程机器的伪命令',那就......

修改

我刚刚注意到的是我的远程计算机不显示来自Internet Explorer的传入连接 - 而是显示:

XMLHttpRequest: Network Error 0x2efd,   
Could not complete the operation due to error 00002efd.

1 个答案:

答案 0 :(得分:0)

使用XMLHttpRequest超时

var xhr = new window.XMLHttpRequest();
var data = 'x=1';
xhr.open('POST', 'http://10.1.0.139:8000/');
xhr.timeout = 5000;
xhr.addEventListener('timeout', function(e) {
   // handle dead server 
   console.log('timeout');
   console.error(e);
});
xhr.addEventListener('error', function(e) {
   // handle error - CORS probably in this case
   console.log('error');
   console.error(e);
});
xhr.addEventListener('load', function(e) {
   // handle success
   console.log('load');
   console.info(e);
});
xhr.send(data);

如果出现CORS错误,则会触发error;如果没有服务器,则会触发timeout