2011-01-20 4 views
1

私はAJAX jQueryチャットアプリケーションを持っています。新しいメッセージを尋ねると動作します。開始時には最新の20個のメッセージを要求してから最新のメッセージの数を取得します。最後のメッセージIDが何であるかを知っていて、それ以来サーバーはメッセージを返します。Javascript ajax double request

問題は低速な接続であり、同じ古いメッセージIDを使用して複数の要求が実行されているため、同じメッセージが複数取得されるため、要求する速度が遅くなります。

一度に1つのリクエストしか実行していないことを確認するにはどうすればよいですか?

答えて

4

私はあなたの繰り返し要求を行うためにsetIntervalを使用しているとします。あなたが言及した正確な理由から、これはベストプラクティスではありません。関数が長い時間がかかる場合は、前回の反復が完了する前に新しい関数が発生する可能性があります。

それはあなたのpostコールのcompleteハンドラ内でsetTimeoutを使用するのが最善です:再入機能について

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

onreadystatechangeイベントハンドラ(successおよびerror、jQuery用語ではIIRC)のsetTimeoutを使用して、「次の」要求を起動します。 setIntervalは使用せず、タイマーに関係なく送信してください。

0

何?次のようなもの:

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

     getMessages(); 
    }); 
}