2009-07-27 35 views

回答

14

根據數據庫內容需要更新的頁面必須經常查詢數據庫。 Javascript是一種客戶端技術,不適用於直接與後端服務器交互。

的JavaScript看起來像這樣(使用jQuery):


$.post("/webroot/checkForChanges.php", 
     { currentNumber: currNumString }, 
     function(dat){ 
      $(dat).find('link').each(function() { 
       $('#linksTable').append(""+$(this).text()+""); 
      }); 
}); 

這將使名爲currentNumber變量誰擁有的值是POST請求的頁面,你會寫(checkForChanges.php)當前在表中的鏈接數的字符串表示(不管你喜歡這些)。

代碼中的函數(dat)部分是請求完成時(即php頁面處理完畢並且接收到的文本已被瀏覽器接收)時運行的回調函數。

當我解釋了PHP頁面正在做什麼時,我將回到這是做什麼。

你沒有告訴我們關於你的數據庫結構的任何信息,但是由於你成功地允許人們添加鏈接,所以你必須在某個地方定義一個序列來跟蹤鏈接的整數ID(這樣每個鏈接都可以在數據庫中給定一個唯一的ID)。我假設你已經把這種「鏈接數」 你應該用下面的僞代碼創建一個簡單的PHP頁面:



//open a database connection 
$DB = connect(name, user, password); 

//receive value 
$currNum = $_POST['currentNumber']; 

//check to see if sequence number has incremented since last time: 
$seqNum = query("SELECT currval('links-count')"); 

if ($seqNum == $currNum){ 
    exit(0); 
} //if they are the same, just exit the page without writing anything 

//otherwise, carry on... get the result of your query (for new links) 
//and loop through, echoing return data 

$newEntries = query("SELECT url FROM links WHERE id > ".$currNum); 

echo "<newlinks>"; 

while ($result = fetch_result($newEntries)) { 
    echo "<link><a>".$result."</a></link>"; 
} 

echo "</newlinks>"; 

通過此頁面返回的輸出將是一個節點的XML文檔對於每個包含要放入表格單元格中的HTML的鏈接。

現在我們可以回到回調函數在您的客戶端Java代碼$。員額要求:


function(dat){ 
    $(dat).find('link').each(function() { 
      $('#linksTable').append(""+$(this).text()+""); 
    }); 
}); 

DAT是返回的文字,把它包裝成一個jQuery對象,然後找到名爲'link'的標籤集合。對於php頁面返回的每個'link'標籤,執行一個函數,將一個新的表格行添加到linksTable中,該表格包含鏈接標籤中的數據。

+1

嗯,這是一個非常完整的答案,我花了一些時間... bballbackus,你試過嗎?您能否接受或投票,或者至少在您的意見中提供一些反饋意見?謝謝 – sillyMunky 2009-09-07 13:21:31

0

你可以在單獨的頁面上有一個主動的javascript,基本上輪詢db的更改,或者你可以有一個回調函數在成功提交後執行此操作。我不確定這裏會發生什麼,所以我不知道該推薦什麼。