我正在做一个长轮询方法聊天室。但似乎,当一个长的民意调查发生并且我刷新了Chrome页面或我尝试发送另一个异步请求时,一切都超时(即我无法再次加载我的域,直到我关闭/重新打开浏览器)。
我的客户端端代码是:
$(document).ready(function() {
setTimeout(
function () {
longPollForMessages();
},
500
);
});
function longPollForMessages()
{
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
$('#chat_messages').append('<div>'+data.messages+'</div>');
longPollForMessages();
}
});
}
我的服务器端:
while(true) {
$messages = $db->getMessages();
if (!$messages || sizeof($messages)==0) {
sleep(1);
} else {
echo '{"message":'.json_encode($messages).'}';
die();
}
}
有什么想法吗?假设没有语法错误。
答案 0 :(得分:0)
我可以看到你已经回答了自己的问题,但我最近遇到了类似的问题,并发现另一种方法是在ajax调用上禁用setTimeout
,然后在success
重新启动它。这样,当您还没有准备好提供信息时,您不会ping服务器以获取信息。
答案 1 :(得分:0)
我从这个问题中找到了它:stackoverflow.com/questions/4457178 / ... - php锁定给定的会话,直到页面完成加载,因此第二个ajax调用无法通过。您必须通过调用session_write_close()来释放锁定;