2009-07-27 15 views
7

私はユーザーが提出できるリンクのデータベースを持っています。ユーザーが新しいリンクを送信するたびに、そのリンクがデータベースに追加されます。私は、送信されたすべてのリンクを一覧表示する別のページを持っています。どのようにしてこの別のページにデータベースの変更をチェックして、それが見つかるとAJAXでロードすることができますか?PHP + jQuery AJAXを使用してMySQLデータベースの変更をチェックし、変更をロードしますか?

答えて

14

データベースの内容に応じて更新する必要があるページは、DBを頻繁にポーリングする必要があります。 Javascriptはクライアント側の技術であり、バックエンドサーバーと直接対話するためのものではありません。

javascriptのは(jqueryのを使用して)次のようになります。


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

これは値を持つcurrentNumberという名前の変数を使用すると、書き込みますページ(checkForChanges.php)へのPOSTリクエストを行います現在テーブル内にあるリンク数の文字列表現(好きなものを数えます)。

コードのfunction(dat)部分は、要求が完了したとき(つまり、PHPページの処理が終了し、結果のテキストがブラウザに受信されたとき)に実行されるコールバック関数です。

私は、PHPページが何をしているのかを説明したとき、これが何をしているのかに戻ってきます。

あなたはデータベース構造について何も教えていませんが、人々がリンクを追加できるようにするためには、リンクの整数IDを追跡するシーケンスをどこかに定義する必要があります。データベースに一意のIDが与えられている)。このページで返される出力はノードを持つXML文書となります



//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>"; 

:私はあなたが次の擬似コードで単純なPHPページを作成する必要があり この「リンクカウント」と呼ばれてきたと仮定しますテーブルセルに配置するHTMLを含むリンクごとに今

私たちはあなたのクライアント側のJavaコードで$ .post要求にコールバック関数に戻ることができます:、


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

DATが返されたテキストであるjQueryオブジェクトとしてそれをラップしてから見つけます「リンク」という名前のタグの集合。 phpページから返された 'link'タグごとに、linkタグ内のデータを含むlinksTableに新しいテーブル行を追加する関数を実行します。

+1

まあ、それは私がしばらく時間をかけたかなり完全な答えです... bballbackus、それを試しましたか?あなたはそれを受け入れるか投票することができますか、または少なくともあなたのコメントにいくつかのフィードバックを与えることができますか?ありがとう – sillyMunky

0

基本的にdbの変更をポーリングする別のページにアクティブなjavascriptを置くことができます。または、成功したサブミット後にコールバック関数を使用することができます。私はここに何が起こっているのか正確には分からないので、何を推薦すべきか分からない。

関連する問題