为什么jQuery会在$ .ajax成功回调中吞下exception?

看起来jQuery 1.6.4故意吞下$ .ajax成功回调中的exception。

如果我这样做:

$.get('/', function() {console.log('doodoo');}) 

我在(Chrome)控制台中得到了这个:

 Object doodoo 

但是,如果我这样做,

 $.get('/', function() {throw 'doodoo';}) 

我在控制台中没有错误:

 Object 

快速浏览一下jQuery源代码就可以看出这显然是有意的:

 try { while( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); } } catch(e) { } 

有谁知道为什么jQuery这样做?

我猜这里,但原因可能是因为你无论如何都无法捕捉错误。 由于它是一个回调,你将无法将其包装在try / catch中。 如果jQuery没有捕获它,你的应用程序将崩溃,这很可能不是你想要的。 如果需要检查错误,请将代码包装在回调内的try / catch中。

 try { $.get('/', function() {throw 'doodoo';}) } catch(e) { // this wont do anything, even if jQuery didn't catch the error } $.get('/', function() { try { throw 'doodoo'; } catch(e) { // this is the proper way to do it } })