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

时间:2012-08-03 17:18:19

标签: jquery

看起来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会这样做?

1 个答案:

答案 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
    }
})