我有一个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让我的异常通过吗?
答案 0 :(得分:0)
如果我理解正确,我认为你实际上想要返回成功,无论它是否有效,然后是状态代码或错误消息。这是因为如果服务器上出现问题,则ajax不会返回。状态代码允许浏览器知道发生了什么,而不是在服务器上抛出错误。
原因是,因为否则服务器会认为它有错,而不是请求,并在那里抛出错误。
答案 1 :(得分:0)
如果您想在FireBug中看到异常,则需要使用console.log('Exception message');
而不是alert('Exception message');
答案 2 :(得分:0)
看来,这是jQuery 1.4的一个bug或缺少的功能。 我们升级到1.6,现在异常即将通过jQuery $ .ajax调用加载和评估Javascript代码。