我有一个AJAX jQuery聊天应用程序,它通过询问新消息来工作,在开始它只询问20条最新消息,然后它获取最新消息的计数,所以当它再次询问时,它知道什么最后一条消息ID,然后服务器返回消息。
问题在于连接速度较慢,它需要的时间比它请求的速度要长,导致获得的信息多于同一条消息,因为有多个请求使用相同的旧消息ID运行。
我如何确保它一次只运行一个请求?
答案 0 :(得分:4)
我认为您正在使用setInterval
来执行重复请求。这不是最佳实践,因为您提到的确切原因:如果函数需要很长时间,则可能会在上一次迭代完成之前发生新函数。
最好在setTimeout
来电的complete
处理程序中使用post
:
function doRequest() {
$.ajax({
url: 'someurl',
/* some other options */
complete: function(){
setTimeout(doRequest, 30000);
}
});
}
doRequest();
答案 1 :(得分:0)
使用setTimeout
事件处理程序中的onreadystatechange
(success
和jQuery术语IIRC中的error
)来触发“下一个”请求。不管怎样都不要使用setInterval
并将它们发送出去。
答案 2 :(得分:0)
重入函数怎么样?类似的东西:
function getMessages(){
$.get('url', function(data){
//process the data
getMessages();
});
}