4

我正在尝试进行长轮询 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);
}
4

1 回答 1

2

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

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

于 2010-04-10T04:34:43.670 回答