通过jQuery Ajax加载的Javascript不会在Firebug中抛出预期的异常

时间:2011-09-01 14:33:22

标签: javascript jquery ajax exception firebug

我有一个Javascript函数,如果出现问题会抛出异常。我已经习惯了这种行为,有一天我花了20多分钟才发现代码中的错误,因为函数没有引发异常,它只是默默地失败了。

使用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 $ .ajax函数从第一页加载第二个html页面。

代码将正确执行,但您将看不到Firebug控制台中记录的异常。

如果你在第一个html页面上运行相同的函数myfunc(null),你会在Firebug中显示一条红线说:

uncaught exception: myfunc: Invalid arguments

但是如果它由jQuery执行则没有注销(我想,jQuery使用eval来运行) $ .ajax之后的脚本。

这是否意味着jQuery本身会在评估Javascript时捕获异常并忽略它们?有什么方法可以告诉jQuery让我的异常通过吗?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为你实际上想要返回成功,无论它是否有效,然后是状态代码或错误消息。这是因为如果服务器上出现问题,则ajax不会返回。状态代码允许浏览器知道发生了什么,而不是在服务器上抛出错误。

原因是,因为否则服务器会认为它有错,而不是请求,并在那里抛出错误。

答案 1 :(得分:0)

如果您想在FireBug中看到异常,则需要使用console.log('Exception message');而不是alert('Exception message');

答案 2 :(得分:0)

看来,这是jQuery 1.4的一个bug或缺少的功能。 我们升级到1.6,现在异常即将通过jQuery $ .ajax调用加载和评估Javascript代码。