处理同步XHR连接错误

时间:2015-12-15 14:01:45

标签: javascript xmlhttprequest jscript wsh

我一直在搜索,找不到任何关于此问题的文档:当使用Microsoft提供的XMLHttpRequest接口发出同步HTTP请求时,如何处理与连接/网络相关的错误。

我正在wscript下工作,制作一个HTTP请求包装器,我想知道如何处理不同的连接/网络错误 (与服务器响应报告的错误相反)对于使用XMLHttpRequest接口的HTTP请求。

为了澄清,我不仅想知道是否发生连接/网络错误,而且还想知道如何确定发生了什么类型的错误,因此不同的错误会导致不同的处理。一个例子是connection timeout错误,connection refused错误和dns resolve错误

之间存在差异
// httpObj is a valid Microsoft/ActiveX provided XMLHttpRequest object name
function () {

    var request = new ActiveXObject(httpObj);
    request.open(this.httpMethod, this.httpUrl, false);
    request.timeout = this.httpTimeout;
    request.setRequestHeader("Connection", "close");
    request.send(this.httpData);

    // How would I handle connection/network-related errors?
}

1 个答案:

答案 0 :(得分:3)

(我从未使用过ActiveX请求,但我认为它们的工作方式与XMLHttpRequest类似;如果我错了,我会很乐意删除此答案。)

如果脚本能够从服务器读取HTTP错误响应,则请求对象的status属性将设置为HTTP错误代码(404500,等)statusText属性将被设置为HTTP错误的描述。

否则,status属性将为0,表示网络故障或缺少跨域CORS权限。

function () {
    ...
    request.send(this.httpData);

    if(request.status == 0) {
        // no response from server, error or otherwise
    }
    if(request.status == 404) {
        // there was a response from the server; it was a 404
    }
}

XHR API不公开任何方式来区分网络错误的类型。 ActiveX对象可能有一些方法可以做到,但我不知道它会是什么,如果它存在。