Javascript обратный вызов Async Ajax YUI 3 - PullRequest
0 голосов
/ 15 ноября 2010

Я пытаюсь уменьшить код и упростить что-то, используя повторно используемый метод для выполнения асинхронных вызовов ajax.Я на самом деле переключаюсь на YUI 3 с jQuery и очищаю вещи в процессе.Это, наверное, очень легко для вас, ребята из javascript, обнаружить, но я пытался выяснить, как мне вызвать мой обратный вызов без утечки памяти.Если я смотрю IE в диспетчере задач, то память очень быстро увеличивается (функция вызывается каждые 1,5 секунды).

По сути, у меня есть обычная веб-страница, на которой есть функция, которую я хочу вызвать после завершения ajax.Я обновляю пользовательский интерфейс и устанавливаю другие переменные, которые являются только частью страницы.У меня есть файл javascript, в который я помещаю метод, который фактически делает вызов ajax.Когда я использую обратный вызов, который я передаю этому методу, он протекает.

файл javascript:

function doAjaxRequest(url, callback) {
    YUI().use('io',
        function (Y) {
            var cb =
            {
                timeout: 5000,
                on: {
                    success: function (x, o) {
                        callback(o.responseText);
                    },
                    failure: function (x, o) {
                        callback("");
                    }
                }
            }

            Y.io(url, cb);
        });
}

веб-страница:

doAjaxRequest(myUrl, showContent); // Called every couple seconds

        function showContent(o) {
            document.getElementById('ajaxcontent').innerHTML = o;
            // Other Stuff Removed    
        }

Если я закомментируюлиния обратного вызова не протекает.Мне нужно сделать обратный вызов по-другому, я просто не знаю, что это такое.

1 Ответ

1 голос
/ 15 ноября 2010

Проблема в том, что вы создаете новый экземпляр YUI с каждым вызовом doAjaxRequest.Вместо этого структурируйте свой код следующим образом:

YUI().use('io', function (Y) {
function doAjaxRequest(url, callback) {
    // ...
}

window.doAjaxRequest = doAjaxRequest;
});

Это создаст только один экземпляр YUI.

...