Javascript ajax双重请求

时间:2011-01-20 21:54:04

标签: javascript jquery html ajax

我有一个AJAX jQuery聊天应用程序,它通过询问新消息来工作,在开始它只询问20条最新消息,然后它获取最新消息的计数,所以当它再次询问时,它知道什么最后一条消息ID,然后服务器返回消息。

问题在于连接速度较慢,它需要的时间比它请求的速度要长,导致获得的信息多于同一条消息,因为有多个请求使用相同的旧消息ID运行。

我如何确保它一次只运行一个请求?

3 个答案:

答案 0 :(得分:4)

我认为您正在使用setInterval来执行重复请求。这不是最佳实践,因为您提到的确切原因:如果函数需要很长时间,则可能会在上一次迭代完成之前发生新函数。

最好在setTimeout来电的complete处理程序中使用post

function doRequest() {
    $.ajax({
        url: 'someurl',
        /* some other options */
        complete: function(){
            setTimeout(doRequest, 30000);
        }
    });
}
doRequest();

答案 1 :(得分:0)

使用setTimeout事件处理程序中的onreadystatechangesuccess和jQuery术语IIRC中的error)来触发“下一个”请求。不管怎样都不要使用setInterval并将它们发送出去。

答案 2 :(得分:0)

重入函数怎么样?类似的东西:

function getMessages(){
   $.get('url', function(data){
      //process the data

      getMessages();
   });
}