背靠背ajax长轮询没有递归回调函数
我试图长时间轮询ajax调用,背对背。目前我这样做的问题是,我从前一个调用的回调函数中进行了每个连续的调用。这是一个问题吗?即使认为数据已返回并执行回调,Firebug也不会显示我的任何ajax调用已完成。递归结构似乎效率低下。有任何想法吗?背靠背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);
}
你是对的,你必须保持无目的的堆栈和关闭,当你做长轮询这种方式,并根据不同的情况和实现你可能会得到一个堆栈溢出或至少低上运行内存......尽管我不确定各种js实现的优化性能(例如尾部递归会使这些问题消失)。
简单的选择是使用window.setTimeout(funcName)
,当全局作用域解析当前作用域时,它将立即调用函数funcName
。
所以我换成了: request = server.send(sendString); 与: window.setTimeout(“recieve()”); 并且功能仍然没有完成。 – Teddy 2010-04-10 04:47:48
等待,因为它是一个异步请求,回调函数应该完成,对吧? – Teddy 2010-04-10 04:51:29
是的,他们应该完成。除非请求超时......而不是完成?你至少可以尝试改变你的最后一行到这个'window.setTimeout(function(){server.send(sendString)});'虽然我不认为这些调用是递归的,但浏览器的HTTP请求是异步的,就像你说的。 – 2010-04-10 08:12:58
urs的某些代码可能会对您有所帮助... – 2010-04-10 04:18:35
如果您的ajax实现使用iframe来处理请求,那么您应该到'net'面板查看请求,它们不会显示在控制台面板 – Dapeng 2010-04-10 04:23:49