2

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

4

1 回答 1

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
    }
})
于 2012-08-03T17:30:05.117 回答