2015-12-15 77 views
1

我一直在搜索並找不到關於此事的任何文檔:當使用Microsoft提供的XMLHttpRequest接口發出同步HTTP請求時,如何處理連接/網絡相關錯誤。處理同步XHR連接錯誤

我下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? 
} 

回答

3

(我從來沒有用過的ActiveX請求,但我認爲他們喜歡XMLHttpRequest工作之間的不同,如果我錯了,我會很樂意刪除此答案)

如果腳本能夠讀取來自服務器的HTTP錯誤響應,請求對象的屬性status將被設置到HTTP錯誤代碼(404500等)和statusText財產將被設置爲descr關於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