【发布时间】:2011-02-11 03:57:21
【问题描述】:
我正在做一个长轮询方法聊天室。但似乎,当发生长轮询并且我在 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();
}
}
有什么想法吗?假设没有语法错误。
【问题讨论】:
-
尝试在服务器端代码中的
echo之后放置一个break; -
感谢四位您的回答 :) 我实际上有,但忘记包含在我的问题代码中。所以这不是问题。
-
伙计们,我从这个问题中弄清楚了:stackoverflow.com/questions/4457178/… - php 锁定一个给定的会话,直到页面完成加载,所以第二个 ajax 调用无法通过。你必须通过调用 session_write_close() 来释放锁;
-
您知道您以
message发回消息,但在您的JavaScript 中使用messages访问它? -
alex - 是的,对不起。我只是快速重写了代码,因为我不想粘贴所有内容(您可能不想阅读所有内容)。 =)
标签: php javascript ajax comet