我有一个实时聊天。我使用 setInterval 每 0.5 秒实时显示所有消息。但我注意到 setInterval 会冻结,有时会使浏览器崩溃。我听说 setTimeout 是最好的替代使用方式?
setInterval(function(){
$.ajax({
url: "display_msg.php",
method: "POST",
data: {conn:conn},
success: function(data) {
$('#chatarea').html(data);
}
});
},500);
您最好使用 setTimeout
它将等待上一个请求解析,然后再再次请求数据。
(function pollMessages() {
$.ajax({
url: "display_msg.php",
method: "POST",
data: {
conn: conn
},
success: function(data) {
$('#chatarea').html(data);
setTimeout(pollMessages, 500)
}
});
})()
问题是setInterval
每x毫秒调用一次该函数,并且,当您提交请求并且服务器需要一些时间来响应时,可能会发生多个请求并行执行的情况,从而给您的应用程序带来一些麻烦。
使用 setTimeout
您只能在完成前一个请求后提交新请求。这会好得多。不要忘记编写一些代码来处理超时问题。
祝你好运!