吞噬了jQuery AJAX回调中引发的异常?

时间:2010-04-27 14:22:53

标签: javascript jquery ajax exception

除了在每个回调中添加try..catch块之外,有没有办法处理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 );
    }               
} );

3 个答案:

答案 0 :(得分:8)

如果你看一下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
        }
    }
});

使用mysuccess(或您喜欢的任何名称),而不是success来自jQuery.ajax次来电。{/ p>

答案 1 :(得分:1)

error回调旨在在请求本身出现问题时使用。根据文件:

  

请求失败时要调用的函数。该函数传递三个参数:XMLHttpRequest对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。

因此,如果您回来的数据存在问题,那么您应该在success回调中处理它 - 可能是通过将其记录到控制台或通知用户。

答案 2 :(得分:0)

您是否研究过jQuery的任何全局AJAX功能,例如ajaxSetupajaxError