2012-01-07 11 views
2

わかりやすい答えを探していますが、見つけられません。コールバック関数を使用する... Jquery .Get

私は何かを実行するjquery.get ajax関数を持っています、私はPHPのドキュメントで待機しているので、実行するのに約10秒かかります。基本的にはajax関数が終了したときに、10秒後に再実行したいと思う。イムコールバックを使用しての思考が、私はそれを構造化する方法は考えているか、私はwhileループを使用するか...イム失わなければならない...

私はこれまで

function listen(callbackFn) { 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username '];} ?>', function(data) { 
     $('#chats').append(data); 
     callbackFn; 
    }); 
}; 
+0

をあなたが(に.getするために同じコールを作りたい)、再び元の後コール?これはウェブページの寿命を通して10秒ごとに繰り返されるものですか? –

答えて

1

これはあなたのために働く必要があります。

(function repeat_request(){ 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
     function(data) { 
      $('#chats').append(data); 
      repeat_request(); 
     } 
    ); 
})(); 

repeat_requestと呼ばれる機能は、できるだけ早く実行されます前の要求は成功します。リクエストが失敗した場合(ユーザーのインターネットが一時的に切断された場合)、要求は繰り返されなくなります。あなたはそれがあなたの代わりにこのような成功の.complete()を使用する必要があります繰り返しておきたい場合は、次の

(function repeat_request(){ 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
     function(data) { 
      $('#chats').append(data); 
     } 
    ).complete(repeat_request); 
})(); 
+0

私はそれが働くように見えることができない、私は火薬爆弾を使用して、それはちょうど1回実行され、もう再帰関数を呼び出してください。 – Robert

+0

ああ待って、私はそれが動作すると思います! – Robert

0

を持ってHERESに私のコード

function poll() { 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', function(data) { 

      $('#chats').append(data); 
      poll(); 
    }); 
} 

poll(); 

この意志はかなり投票を永遠にするたびにAjaxの呼び出しが戻る:私はあなたの最善の策は、関数の中にそれをラップして再帰的に呼び出すことだと思います。

1

機能のコードを入れて、10秒のタイムアウトを再帰的にそれを呼び出す:

function do() { 
    $.get('...', function (data) { 
     // data processing... 

     setTimeout(do, 10000); 
    }); 
} 

do(); 
+0

これが欲しいと仮定した場合、クライアントブラウザーにPHPを10秒待機させるよりも、setIntervalを使用するほうがよいと思います。 –

+0

よく...私はPHPを10秒待つようにしなければなりません。長いポーリングをしています。しかし、この場合、私はまだ成功ブロックに関数を置くことができますか? – Robert

+0

@scott PHP処理には時間がかかります(待ち時間やその他の要因によって待ち時間が発生する可能性があります)、前回の呼び出しが完了してから10秒後に次の呼び出しを開始する必要があります。これがこれです。そしてそれはIMOを意味する。間隔があると、間もなくポーズなしでサーバーに絶え間なく要求が送信される可能性があります。 – deceze

0

あなたは試すことができます:

function listen() 
{ 
$.get('thread.php?tag=<?php echo $tag ?>&username=<?php 
if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
    function(data) { 
     $('#chats').append(data); 
     setTimeout(listen,100); // prevent recursive call 
    } 
); 
}; 
関連する問題