没有递归回调函数的背靠背ajax长轮询

时间:2010-04-10 04:15:39

标签: javascript ajax callback long-integer

我正在尝试长时间轮询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 个答案:

答案 0 :(得分:1)

你是对的,当你以这种方式进行长时间轮询时,你必须维持一个堆栈和闭包,并且根据情况和实现你可能会得到堆栈溢出或至少内存不足...虽然我不确定各种js实现的优化程度(例如尾部递归会使这些问题消失)。

简单的替代方法是使用window.setTimeout(funcName),它将在当前范围从全局范围解析时立即调用函数funcName