我有一個AJAX jQuery的聊天應用程序,它的工作原理是尋求新的消息,在啓動它只是要求對最近的20條消息,那麼它得到的最新消息的數量,所以當它再次問它知道最後一個消息ID是什麼,並且服務器從那以後返回消息。的Javascript AJAX雙重要求
的問題是在較慢的連接,它需要更長的時間,然後它請求,導致越來越然後相同的消息中的一個,因爲存在與相同的舊消息ID運行一個以上的請求的速率。
我將如何確保它只能運行一次一個要求嗎?
我有一個AJAX jQuery的聊天應用程序,它的工作原理是尋求新的消息,在啓動它只是要求對最近的20條消息,那麼它得到的最新消息的數量,所以當它再次問它知道最後一個消息ID是什麼,並且服務器從那以後返回消息。的Javascript AJAX雙重要求
的問題是在較慢的連接,它需要更長的時間,然後它請求,導致越來越然後相同的消息中的一個,因爲存在與相同的舊消息ID運行一個以上的請求的速率。
我將如何確保它只能運行一次一個要求嗎?
我相信你正在使用setInterval
做你的一再要求。這不是最佳實踐,因爲您提到的確切原因:如果函數需要很長時間,則可能會在前一次迭代完成之前發生新函數。
這是最好的complete
處理您的通話post
內使用setTimeout
:
function doRequest() {
$.ajax({
url: 'someurl',
/* some other options */
complete: function(){
setTimeout(doRequest, 30000);
}
});
}
doRequest();
在onreadystatechange
事件處理程序中使用setTimeout
(jQuery條款IIRC中的success
和error
)以觸發'下一個'請求。不要使用setInterval
,並在計時器上發送它們。
怎麼樣一個重入函數?喜歡的東西:
function getMessages(){
$.get('url', function(data){
//process the data
getMessages();
});
}