Is there any way to handle exceptions thrown from AJAX callbacks in jQuery, other than adding a try..catch block to each callback? The error function is not called in this situation.
$.ajax(
{
    url: 'myurl.rails',
    success: function( data )
    {
        throw 'Oh no!';
    },
    error: function ( xhr, textStatus, errorThrown )
    {
        console.log( 'AJAX call failed', xhr, textStatus, errorThrown );
    }               
} );
                If you take a look at the non-minified version of jQuery 1.4.2, the relevant lines are 5264 through 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 just calls the success function applied to settings object (if it exists) without any care of what the function returns or throws.
What you can do instead is use jQuery.ajaxSetup() like so:
jQuery.ajaxSetup({
    success: function() {
        try {
            if ( this.mysuccess ) {
                this.mysuccess.apply( this, arguments );
            }
        }
        catch(err) {
            // whatever
        }
    }
});
And use mysuccess (or whatever you would prefer to call it) instead of success at the individual jQuery.ajax calls.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With