作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个聊天应用程序,它会在超时时轮询服务器。如果随着时间的推移,最近没有任何事件,超时就会增加。函数 loadNew()
对服务器执行 ajax 调用,服务器以消息数据进行响应。
pollTimeoutTime = 500;
function poll() {
pollTimeout = setTimeout(function(){
loadNew();
if (!new_messages_count) {
//Increasing delay between polls as no messages are incoming to a maximum of 1 minute/60 seconds
if (pollTimeoutTime < 60000) pollTimeoutTime = pollTimeoutTime * 1.25;
}
else {
//Reset delay between poll to default of 0.5 seconds
pollTimeoutTime = 500;
}
poll();
},pollTimeoutTime);
}
我遇到的问题是超时函数不会等待函数 loadNew()
完成,这会导致如果超时低于函数中的 ajax 调用完成所需的时间。因此,服务器多次响应相同的数据,从而导致聊天中消息的重复显示。
有没有办法让超时仅在 loadNew()
完成获取和显示数据后触发?
编辑:使用@Brad M的答案后,它不再重复消息。我仍然希望有一种方法可以在用户提交消息后进行民意调查,以便立即显示新消息。这会干扰 loadNew()
中设置的超时,从而导致消息再次重复。你能想出一种方法让它发挥作用吗?
最佳答案
如果没有看到 loadNew
函数,一个简单的解决方法可能是更改该函数以返回您的 ajax 调用 (return $.ajax({...});
)并更改您发布的代码:
pollTimeoutTime = 500;
function poll() {
pollTimeout = setTimeout(function () {
loadNew().done(function (result) {
if (!new_messages_count) {
//Increasing delay between polls as no messages are incoming to a maximum of 1 minute/60 seconds
if (pollTimeoutTime < 60000) pollTimeoutTime = pollTimeoutTime * 1.25;
} else {
//Reset delay between poll to default of 0.5 seconds
pollTimeoutTime = 500;
}
poll();
});
}, pollTimeoutTime);
}
关于javascript - 聊天应用程序轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18195623/
我是一名优秀的程序员,十分优秀!