看起来jQuery 1.6.4故意吞下$ .ajax成功回调中的异常。
如果我这样做:
$.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会这样做?
答案 0 :(得分:1)
我猜这里,但原因可能是因为你无论如何都无法捕捉到错误。由于它是一个回调,你将无法将其包装在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
}
})