Исключения, брошенные в обратные вызовы jQuery AJAX, проглотили? - PullRequest
7 голосов
/ 27 апреля 2010

Есть ли способ обработки исключений, вызванных обратными вызовами AJAX в jQuery, кроме добавления блока try..catch к каждому обратному вызову? В этом случае функция ошибки не вызывается.

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

Ответы [ 3 ]

8 голосов
/ 27 апреля 2010

Если вы посмотрите на не минимизированную версию 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 вызовов.

1 голос
/ 27 апреля 2010

Обратный вызов error предназначен для использования в случае проблем с самим запросом. По документам:

Функция, вызываемая в случае сбоя запроса. Функции передаются три аргумента: объект XMLHttpRequest, строка, описывающая тип возникшей ошибки и необязательный объект исключения, если таковой произошел. Возможные значения для второго аргумента (кроме нуля): «timeout», «error», «notmodified» и «parsererror».

Таким образом, если вместо этого возникает проблема с данными, которые вы возвращаете, то вам следует устранить их с помощью обратного вызова success - возможно, зарегистрировав его на консоли или уведомив пользователя.

0 голосов
/ 27 апреля 2010

Рассматривали ли вы какие-либо глобальные функции AJAX в jQuery, такие как ajaxSetup и ajaxError ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...