javascript - 吞下 jQuery AJAX 回调中抛出的异常?

标签 javascript jquery ajax exception

除了向每个回调添加 try..catch block 之外,是否有任何方法可以处理从 jQuery 中的 AJAX 回调抛出的异常?在这种情况下不会调用错误函数。

$.ajax(
{
    url: 'myurl.rails',
    success: function( data )
    {
        throw 'Oh no!';
    },
    error: function ( xhr, textStatus, errorThrown )
    {
        console.log( 'AJAX call failed', xhr, textStatus, errorThrown );
    }               
} );

最佳答案

如果您看一下 jQuery 1.4.2 的非缩小版本,相关行是 5264 到 5274:

function success() {
    // If a local callback was specified, fire it and pass it the data
    if ( s.success ) {
        s.success.call( callbackContext, data, status, xhr );
    }

    // Fire the global callback
    if ( s.global ) {
        trigger( "ajaxSuccess", [xhr, s] );
    }
}

jQuery 只调用应用于设置对象(如果存在)的 success 函数,而不关心函数返回或抛出什么。

您可以改为使用 jQuery.ajaxSetup()像这样:

jQuery.ajaxSetup({
    success: function() {
        try {
            if ( this.mysuccess ) {
                this.mysuccess.apply( this, arguments );
            }
        }
        catch(err) {
            // whatever
        }
    }
});

并在单独的 jQuery.ajax 调用中使用 mysuccess(或任何您喜欢的称呼)而不是 success

关于javascript - 吞下 jQuery AJAX 回调中抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2721983/

相关文章:

javascript - 如何找出哪个 DOM 元素具有焦点?

javascript - 在同一个项目中同时使用 coffeescript 和 typescript

javascript - 调用类属性不起作用

jquery - 如何加快 Owl Carousel 的滑动速度?

javascript - 动态生成的字段和数据在提交后保留

jquery - 使用 JSONP 或 CORS 的跨域 JavaScript 调用

Javascript 变量似乎是静态的

javascript - 在使用 forEach 然后过滤查询后,通过 JavaScript 中的下拉列表进行过滤不会抛出任何结果

javascript - 如何根据视口(viewport)大小调整 Div 高度?

javascript - 屏幕阅读器是否可以阅读由 JavaScript 动态创建的网页?