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 に答える