2015-12-15 5 views
1

Я искал и не могу найти документацию по этому вопросу: Как обрабатывать связанные с подключением/сетевыми ошибками при использовании предоставленного Microsoft интерфейса XMLHttpRequest для выполнения синхронного HTTP-запроса.Ошибки подключения синхронизации XHR

Я работаю под WScript, сделав запрос HTTP обертку и интересно, как я бы обрабатывать различные подключения/сетевые ошибки(в отличие от ошибок сервера ответа сообщил) для запроса HTTP с помощью интерфейса XMLHttpRequest ,

Чтобы уточнить, не только я хочу знать, произошла ли ошибка подключения/сети, но и как определить, какая ошибка произошла, поэтому разные ошибки приведут к разной обработке. Примером может быть отличаясь между 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? 
} 

ответ

3

(я никогда не использовал запросы ActiveX, но я предполагаю, что они работают как XMLHttpRequest в, если я не прав, я с удовольствием удалить этот ответ.)

Если сценарий был в состоянии прочитать ошибочный ответ HTTP с сервера, status свойство объекта запроса будет установлен код ошибки HTTP (404, 500 и т.д.) и statusText свойство будет установлено в descr iption ошибки 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 может быть какой-то способ сделать это, но я не знаю, что бы это было, если оно существует.

+0

Я не ищу, чтобы обрабатывать ошибки статуса ответа (ошибки, полученные с помощью сервера), но только проблемы с подключением – SReject

+0

Как я могу различать тайм-аут соединения и ошибку разрешения DNS? – SReject

+0

@SReject Я думал, что вы хотите отличить ответ HTTP-ошибок от сетевых ошибок, но из вашего редактирования я вижу, что вы действительно хотите различать разные типы ошибок соединения. Этого нельзя сделать с помощью XHR API, который не различает типы сетевых ошибок. Возможно, это возможно с использованием какого-то проприетарного поведения ActiveX, но я не знаю, как, если это вообще возможно. – apsillers

Смежные вопросы