2012-11-08 99 views
0

我想要做的是捕獲所有錯誤,我處理自己。問題捕捉jQuery ajax例外

但是,當jQuery.ajax()發生錯誤,我可以知道是否有錯誤選項的錯誤。但它並沒有被我的window.onerror事件捕獲。

window.onerror = function(e) { 
    console.log("i was here! ERROR: ", e); 
    console.log("-----------"); 
    return true; //dont show errors on console 
} 

$(function() { 

    $.ajax({ 
     url: "asdasdasd/as/da/sdtest/asdasd", 
     error: function() { 
      // ok i know here is an error and it catches on my window.onerror. BUT look at your console, still have a GET error. That error I want to handle. Can be with try/catch or inside the window.onerror. I want that Exception object. Not this one that I created. 
      throw new Error("it catches, but still have errors on my console"); 
     } 
    }); 

    test[0].test = "it fails"; 

}); 

你可以在這裏測試過:http://jsfiddle.net/uHPXm/4/

+1

,做你想要得到什麼(在解析響應會出錯)?不,我在這裏!錯誤:未捕獲錯誤:它捕獲,但我的控制檯上仍然有錯誤?或者是什麼? –

+0

您是否看到:GET http://fiddle.jshell.net/_display/asdasdasd/as/da/sdtest/asdasd 404(NOT FOUND)。這就是我想要處理我的window.onerror,或在try/catch中。我需要Exception對象。堆棧有這個錯誤。我想獲得StackTrace。並使用我的錯誤函數拋出新的錯誤我不能 –

回答

0

誤差函數接受三個參數,error(jqXHR, textStatus, errorThrown)

的jqXHR就是XMLHttpRequest對象,該textStatus它的字符串,如timeoutabort和errorThrown是原始錯誤消息,例如未找到或內部服務器錯誤。

你可以Read the documentation並且可以下到error部分,如果你願意的話可以閱讀更多內容。

0

document.onerror

An event handler for runtime script errors.

在你的情況下,有腳本沒有運行時錯誤。腳本沒問題,但請求中有一些錯誤。基本上,沒有例外。裏面的jQuery會有這樣的事情(這是不是從jQ​​uery代碼完全相同,但它會是相似的):

xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState != 4) return 

    if (xmlhttp.status == 200) { 
     // Everything is ок 
     ... 
     alert(xmlhttp.responseText); 
     ... 
    } else { 
     handleError(xmlhttp.statusText) // Something went wrong, error handler called 
    } 
} 

xmlhttp.send(); 


function handleError(message) { 
     alert("Error: "+message) 
} 

基本上,404是不是瀏覽器的異常。

你可以試試看jQuery.ajaxError 它會捕獲所有發生在ajax請求中的錯誤。

同時也可能會拋出將由window.onerror被逮住,如果你將設置$.ajax({... dataType:'json'...})一個錯誤,將響應得到一個HTML