为什么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 } })