2012-01-07 61 views
2

我一直在尋找和尋找一個容易理解的答案,但我找不到一個。使用回調函數... jquery.Get

我有一個jQuery的.get ajax函數來運行的東西,它需要大約10秒,因爲我有一個等待在PHP文檔。我想在10秒後再次運行它,所以基本上當ajax函數完成時。使用回調的即時通訊思想,但我不知道如何構建它或者我應該使用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

你想原件後做出同樣的調用獲得()再次呼叫?這是否在網頁的整個生命週期中每10秒重複一次? – 2012-01-07 04:19:52

回答

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

我似乎無法得到它的工作,即時通訊使用螢火蟲,它似乎只運行一次,然後它不再次調用遞歸函數。 – Robert 2012-01-07 05:15:32

+0

哦,等一下,我認爲它確實有用! – Robert 2012-01-07 05:18:08

0

我認爲最好的辦法是來包裝成一個函數,遞歸調用它:

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

假設這是需要的,我更喜歡讓客戶端瀏覽器使用setInterval而不是讓php等待10秒。 – 2012-01-07 04:23:34

+0

以及...我必須讓PHP等待10秒..進行長時間輪詢。但是,在這種情況下,我仍然可以把功能放在成功模塊中嗎? – Robert 2012-01-07 04:24:57

+0

@scott似乎PHP處理需要一段時間(這可能是由於等待,由於延遲或任何其他因素),下一次調用應該在前一次調用完成後10秒啓動。這就是這樣做的。這是有道理的IMO。有間隔可能會迅速導致對服務器的連續請求,而不會在兩者之間暫停。 – deceze 2012-01-07 04:25:24

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 
    } 
); 
};