2015-11-06 34 views
3

我正在寫一個JavaScript應用程序,它會發出遠程服務器的HTTP請求。用戶將輸入主機名稱。XMLHttpRequest()&net :: ERR_NAME_NOT_RESOLVED

我想提供診斷消息,如果他們輸入無法解析的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有狀態= 0,反應是「」,所以沒有什麼地方出了錯很多指示。但是控制檯顯示「無法加載資源:net :: ERR_NAME_NOT_RESOLVED」,因此瀏覽器(Chrome)能夠找出發生的事情。

如何獲得ERR_NAME_NOT_RESOLVED的指示?

更新:我已經回來到這個問題時,使用的是不是「超時」任何迴應指該名稱解析,主機答案策略等

這個問題的答案我的原問題似乎是:看起來,瀏覽器本身(在這種情況下爲Chrome)檢測到解決失敗並將其顯示在控制檯中,但XMLHttpRequest API不夠豐富,無法指出原因。所以這個可憐的Javascript程序員被困在超時時間之內。

我還刪除了CORS標頭,正如其中一位正確提到的評論者沒有任何價值。

+0

設置'req.setRequestHeader('Access-Control-Allow-Origin',url);'在請求中是沒用的。 – epascarello

+0

我聽說這很重要:你能說出爲什麼它沒用嗎?謝謝你幫我理解這個 –

+0

因爲服務器只能設置它。 – epascarello

回答

0

經過大量的研究,我更清楚地瞭解問題並理解了答案(不,在錯誤狀態下無法得到原因 - 例如ERR_NAME_NOT_RESOLVED)。

這是的設計。 Javascript錯誤處理例程不會,也不能返回關於失敗原因的更多信息。瀏覽器這樣做是爲了防止惡意的Javascript代碼在本地網絡上運行端口掃描程序並將該信息發送到遠程服務器。

這一點通過我對Chromium bug記者的報告以及其中一位開發人員的回覆可以很清楚地看出來,特別是:https://bugs.chromium.org/p/chromium/issues/detail?id=718447特別是評論#2。

因此,窗口中的JavaScript運行在沙箱中,只能訪問 加載,超時,中止和錯誤狀態,沒有任何進一步的粒度。 (瀏覽器的調試環境,雖然可以顯示這個信息,所以你可以弄清楚出了什麼問題......)