2011-09-01 39 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');

相关问题