【问题标题】:Live updates using JQuery?使用 JQuery 进行实时更新?
【发布时间】:2009-12-14 04:36:17
【问题描述】:

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

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

就目前而言,我尝试使用时间(即“SELECT * FROM table WHERE time >= $time”)这样做,但是已经意识到它的局限性并且无法符合我最初的想法。

有什么想法吗?我更愿意这样做,而不必将我的脚本改造成使用 XML 来传输数据 - 但是,如果这是唯一的情况,我将很乐意接受。 :)

【问题讨论】:

  • 使用时间戳有什么问题?
  • 理论上,没什么。我只是还没有找到符合我要求的使用方法和检索帖子的方法。

标签: php jquery mysql ajax


【解决方案1】:

您的问题在很多方面都缺乏细节。我将假设您会定期调用 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,
));
?>

这个主题有很多变化。

【讨论】:

    【解决方案2】:

    如果您的 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()

    【讨论】:

    • 嘿,Doug,我知道你很久以前就发布了这个,但你能向我解释一下 update.php 的样子吗?
    猜你喜欢
    • 2013-05-03
    • 2013-03-12
    • 1970-01-01
    • 2013-04-04
    • 2016-07-26
    • 2022-08-15
    • 2020-10-18
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多