2010-02-02 155 views
2

我有一個數據庫表,其中包含一個作業隊列。一個單獨的程序處理這些作業。我想爲用戶提供一個網頁來觀看隊列的進度。服務器端腳本查詢表並以JSON格式返回它是沒有問題的。jQuery - 輪詢作業隊列

我已經做了一些閱讀jQuery和PeriodicalUpdater plugin。我想知道是否完全可以使用這個插件來創建一個可視化隊列(基本的解釋是一個列表,每行中的每行都有一行),下一個已完成的作業將被刪除它投票的時間。正如我所說,服務器端腳本不是一個問題,我只是無法繞開這種UI /動畫。任何提示爲進一步閱讀將不勝感激,或者如果我完全錯誤地樹吠,請讓我知道。

在此先感謝

回答

8

我不熟悉的PeriodicalUpdater插件,但如果我是你,我會去了解一下簡單地使用JavaScript的「setTimeout的」功能。 setTimeout允許您以指定的時間間隔運行一個函數。

對於自己相關的您的情況爲例,在這裏看到:

<script type="text/javascript"> 

setTimeout("updateTable();", 5000); 

function updateTable() 
{ 
    $.post("/your_script.php", {}, function(result) { 

      $("#my_table").html(result); 

    }); 
    setTimeout("updateTable", 5000); 
} 

</script> 

注:有1000毫秒爲一秒,這樣的功能設計爲斷火每5秒。

此外...

我假設在你的隊列中的每個入口都有一個與之關聯的唯一ID。在你的主HTML頁面,我想打印出來的表格是這樣的:

<table> 
<tr id='q1'><td>Queue Item 1</td></tr> 
<tr id='q2'><td>Queue Item 2</td></tr> 
<tr id='q3'><td>Queue Item 3</td></tr> 
<tr id='q4'><td>Queue Item 4</td></tr> 
<tr id='q5'><td>Queue Item 5</td></tr> 
</table> 

換句話說,在您的隊列分配表的每一行,在你的表中的條目具有相同的ID。然後,當您的AJAX調用返回結果時,您可以檢查是否有任何隊列項目已完成。如果他們有,你可以這樣做:

$("#q1").fadeOut("fast"); 
+0

基於這個例子中你提供我: <腳本類型=「文本setTimeout(「updateTable();」,10000);/javascript「> setTimeout 功能updateTable() { $ .POST( 「test.pl」,{},功能(結果){ \t \t $( 「#txtJSON」)VAL(結果); \t \t $(「# jobtable「)。HTML(結果); }); setTimeout(「updateTable();」,10000); } <表ID = '#jobtable'> 我得到的JSON爲: { 「myData的」: [ \t { 「REC_NO」: 「107045」, 「JOB_ID」: 「1」, 「JOB_TEXT」: 「任務1」}, \t { 「REC_NO」: 「107046」, 「JOB_ID」: 「1」 ,「JOB_TEXT」:「任務2」} \t]} 但$(「#jobtable」).html(result)不會創建表。 – 2010-02-10 18:55:04

0

你不需要長時間輪詢。您只需要定期調用ajax來使用setInterval刷新隊列。每次呼叫服務器時,你會得到整個現有隊列,比較當前隊列,並刪除那些不再存在:

<script type="text/javascript"> 
var old_result = {}; 
setInterval(function(){ 
    $.post(YOUR_URL, {}, function(result) { 
     //compare result with old_result 
     //remove missing elements using an animation on that row 
     //set old_result to result 
    }); 
}), 5000); 

</script>