2014-04-23 24 views
-1

捕捉我有這樣的代碼:加載錯誤不是由try catch塊

try{ 
    ... 
} catch(error){ 
    ... 
}; 

try塊,有一個函數調用,使得對服務器的請求。當在服務器上沒有資源,將引發一個錯誤(因爲我可以在谷歌Chrome瀏覽器的開發者工具中看到):

Failed to load resource: the server responded with a status of 404 (Not Found) 

,我試圖抓住它在catch塊,但沒有捕獲錯誤。

是否JavaScript的一個功能是加載錯誤未被trycatch塊捕獲?

+1

怎麼樣你提出要求?我自己是新來的Javascript,但這樣的錯誤通常不是例外。 – Linuxios

+0

@Linuxios我不知道提出請求的確切命令。我調用了庫中的函數,該函數嘗試加載某個文件。 – sawa

+0

我們可以看到那個代碼(對庫的調用)嗎? – Linuxios

回答

3

通常情況下,從服務器請求信息時(例如,通過AJAX,通過設置img元素等的src),你沒有得到一個例外,但你得到一個錯誤事件或回調,這不僅僅是因爲執行請求的代碼在請求完成之前就完成了,所以在這一點上引發異常是不可能的。既然你沒有展示你如何請求信息,那麼就不可能更具體,但這就是你沒有得到例外的原因。

例如,對於一個Ajax請求,如果有看到Ajax請求完全錯誤,但與XMLHttpRequest對象的statusCode是一個錯誤狀態代碼,而不是200。如:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     // The request is complete; did it work? 
     if (xhr.statusCode >= 200 && xhr.statusCode < 300) { 
      // Yes 
     } 
     else { 
      // No, got a code outside the 2xx range 
     } 
    } 
}; 
xhr.open("GET", "/your/url/here", true); 
xhr.send(); 
+0

我明白了。所以非200迴應並不是例外。谷歌Chrome開發人員工具將其與其他例外情況一起顯示,這是誤導性的。 – sawa

+0

@sawa:不,Web控制檯顯示了很多東西。異常,請求失敗,與使用棄用的API有關的警告。有沒有承諾,錯誤是例外。 –

+0

感謝您的澄清。 – sawa