2011-01-20 29 views
1

我有一個AJAX jQuery的聊天應用程序,它的工作原理是尋求新的消息,在啓動它只是要求對最近的20條消息,那麼它得到的最新消息的數量,所以當它再次問它知道最後一個消息ID是什麼,並且服務器從那以後返回消息。的Javascript AJAX雙重要求

的問題是在較慢的連接,它需要更長的時間,然後它請求,導致越來越然後相同的消息中的一個,因爲存在與相同的舊消息ID運行一個以上的請求的速率。

我將如何確保它只能運行一次一個要求嗎?

回答

4

我相信你正在使用setInterval做你的一再要求。這不是最佳實踐,因爲您提到的確切原因:如果函數需要很長時間,則可能會在前一次迭代完成之前發生新函數。

這是最好的complete處理您的通話post內使用setTimeout

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

onreadystatechange事件處理程序中使用setTimeout(jQuery條款IIRC中的successerror)以觸發'下一個'請求。不要使用setInterval,並在計時器上發送它們。

0

怎麼樣一個重入函數?喜歡的東西:

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

     getMessages(); 
    }); 
}