2011-09-01 20 views
1

我有一個Javascript函數,如果出現問題會引發異常。我習慣了這種行爲,總有一天花了20多分鐘才找到代碼中的錯誤,因爲函數沒有拋出異常,它只是失敗了。通過jQuery Ajax加載的Javascript不會在Firebug中引發預期的異常

使用Firebug插件在Firefox中試試以下代碼。 與函數創建一個HTML頁面:

function myfunc(key) 
{ 
    alert('I started'); 
    if(!key) 
    throw 'myfunc: Invalid arguments'; 
} 

然後用代碼創建第二個HTML頁面:

<script type="text/javascript"> 
myfunc(null); 
alert('Exception was before me!'); 
</script> 

和使用jQuery $就功能的第一個頁面加載第二個HTML頁面。

代碼將正確執行,但您將看不到在Firebug控制檯中記錄的異常。

如果右側FRST HTML頁面上運行相同的功能MYFUNC(空),你會本身iimediately在Firebug紅線說:

uncaught exception: myfunc: Invalid arguments 

但並沒有什麼退出,如果它被執行jQuery(我猜,jQuery使用eval在$ .ajax之後運行 腳本)。

這是否意味着jQuery本身捕捉異常並在評估Javascript時忽略它們?有什麼方法可以告訴jQuery讓我的異常通過嗎?

回答

0

看來,這是一個錯誤或jQuery的1.4的功能缺失。 我們升級到了1.6,即使JavaScript代碼被jQuery $ .ajax調用加載和評估,現在異常情況仍然可以通過。

0

如果我理解正確,我認爲你實際上想要返回成功,無論它是否工作,然後是狀態碼或錯誤消息。這是因爲如果服務器出現問題,ajax不會返回。狀態碼允許瀏覽器知道發生了什麼,而不是將錯誤拋出到服務器上。

這是因爲,否則服務器會認爲它是錯誤的,而不是請求,並在那裏引發錯誤。

+0

我只是想讓jQuery重新拋出'myfunc:Invalid arguments'異常,但它不會發生。如果我從第一個html頁面右鍵運行myfunc(null),Firebug會顯示一條紅線:「未捕獲的異常:myfunc:無效的參數」,我知道發生了什麼。但是,如果它發生在AJAX腳本中,異常消失。 – JustAMartin

0

,如果你想看到螢火蟲之外,你將需要使用console.log('Exception message');,而不是使用alert('Exception message');

相關問題