Глобальный обработчик ошибок ajax и замыкания - PullRequest
1 голос
/ 30 января 2012

Я пытаюсь обернуть голову вокруг проблемы, связанной с замыканием.

Я установил глобальный обработчик ошибок для jquery, используя $(document).ajaxError, упрощенная версия:

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        LogError(settings.url, function() { $.ajax(settings); });
    }
);

LogError - это функция, которая регистрирует ошибку и позволяет пользователю повторить запрос (он вызывает функцию, переданную через второй параметр в приведенном выше примере).

Все хорошо, когдаесть только одна ошибка, но при наличии нескольких ошибок настройки всегда указывают на один объект.Я понимаю, что это может быть связано с тем, что:

a) Все объекты передаются по ссылке.
b) Моя функция обратного вызова получает настройки из параметров ajaxerror, этот же объект может быть повторно использован для будущих ошибок.?

Может ли кто-нибудь подтвердить, что происходит, и как мне исправить это?

Спасибо!

1 Ответ

1 голос
/ 30 января 2012

Это работает правильно:

$.ajax({
    url: '/some_url',
    success: function(){}
    });
$.ajax({
    url: '/some_other_url',
    success: function(){}
    });
$(document).ajaxError(
    function(event, xhr, settings, exceptionthrown)
    {
       alert(settings.url);
    }
);

Выходы: /some_url и /some_other_url

пс: с добавлением $.ajax(settings); после оповещения создает бесконечную рекурсию с чередованием /some_urlи /some_other_url.Который ест ресурсы ... Если у вас отложенный вызов второго аргумента, попробуйте записать его как

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        var sett = settings;
        LogError(settings.url, function() { $.ajax(sett); });
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...