使用JQuery实时更新?

时间:2009-12-14 04:36:18

标签: php jquery mysql ajax

目前,我有一个Javascript(JQuery)前端,它定期向一个单独的PHP脚本发出请求,返回帖子。

但是,为了提高效率,我想简单地将结果添加到数组中,甚至不查看现有帖子。

按照目前的情况,我试图用时间(即“SELECT * FROM table WHERE time> = $ time”)这样做,但是,已经意识到它的局限性和无法符合我最初的想法。

那里有什么想法吗?我更喜欢这样做,而不必将我的脚本改为使用XML来传输数据 - 但是,如果这是唯一的情况,我将很乐意承担责任。 :)

2 个答案:

答案 0 :(得分:4)

你的问题在很多方面都缺乏细节。我假设您定期打算调用PHP脚本。我将假设posts表有一个自动增量ID。这样您就可以将其传递给查询并获得更新的帖子。

var current_id = 1234; // this will need to be filled in somehow

setInterval(get_latest_posts, 10000);

function get_latest_posts() {
  $.getJSON('/latest', {current_id: current_id}, function(data) {
    current_id = data.new_id;
    // process data.posts
  });
}

PHP脚本:

<?php
mysql_connect(...);
mysql_select_db('...');

// retrieve newer posts
$current_id = intval($_POST['current_id']);
$sql = <<<END
SELECT * FROM posts WHERE id > $current_id
END;
$query = mysql_query($sql);
$new_id = $current_id;
$posts = array();
while ($row = mysql_fetch_array($query)) {
  $posts[] = $row;
  $new_id = max($new_id, $row['id']);
}

// return the posts as a JSON object    
header('Content-Type: application/json');
echo json_encode(array(
  'new_id' => $new_id,
  'posts' => $posts,
));
?>

这个主题有很多变化。

答案 1 :(得分:3)

如果您的HTML看起来像这样(您需要根据您的情况进行调整):

<div id="posts">
  <div id="post-1"> ... </div>
  <div id="post-2"> ... </div>
  <div id="post-3"> ... </div>
  <div id="post-4"> ... </div>
</div>

您可以像这样更新加载请求:

function loadNewPosts(){
   var id = $("#posts > div:last")[0].id.substr(4);

   $.get('/update.php', { lastId: id }, function(data){
       $("#posts").append(data);
   }, 'html');
}

window.setInterval(loadNewPosts, 1000*60*5) // every 5 minutes

只需查找id的新帖子,该帖子大于页面上的最后一个id,并将新的帖子作为HTML返回。

更新如果您的帖子按时间倒序排列,请使用:first代替:lastprepend()代替append()