Полный опрос ajax без рекурсивной функции обратного вызова - PullRequest
2 голосов
/ 10 апреля 2010

Я пытаюсь сделать длительный опрос ajax, спина к спине. Проблема текущего способа, которым я занимаюсь, заключается в том, что я выполняю каждый последующий вызов из функции обратного вызова предыдущего вызова. Это проблема? Firebug не показывает ни один из моих вызовов ajax как завершенный, даже при том, что данные возвращены и обратный вызов выполнен. Рекурсивная структура кажется неэффективной. Есть идеи?

window.addEvent('domready', function()
{
    server =  new Request({
    url: "chat.php",
        method: 'get',
        link:   'ignore',
        onSuccess: callback,
    });

    request = server.send();
}

function callback(data)
{
    console.log(data);
    var data = JSON.decode(data);
    messId = data.max;
    for(var i = 0; i < data.messages.length; i++)
    {
        print("", data.messages[i].text);
    }
    var sendString = "messId="+messId;
    request = server.send(sendString);
}

1 Ответ

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

Вы правы, вы должны поддерживать стек и замыкания без всякой цели, когда вы делаете длинный опрос таким образом, и в зависимости от ситуации и реализации вы можете получить переполнение стека или, по крайней мере, нехватку памяти ... хотя я точно не знаю, какие оптимизации выполняют различные реализации js (например, хвостовая рекурсия, которая устранит эти проблемы).

Простая альтернатива - использовать window.setTimeout(funcName), который немедленно вызовет функцию funcName после разрешения текущей области из глобальной области.

...