Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用JQuery进行实时更新?_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Php 使用JQuery进行实时更新?

Php 使用JQuery进行实时更新?,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,目前,我有一个Javascript JQuery前端,它定期向一个单独的PHP脚本发出请求,该脚本返回帖子 但是,为了提高效率,我只想向数组中添加新结果,而不想查看现有的帖子 就目前情况而言,我尝试使用时间,即从表中选择*,其中时间>=$time,但是,我已经意识到它的局限性,无法符合我最初的想法 有什么想法吗?我更愿意这样做,而不必将我的脚本改造成使用XML传输数据——不过,如果这是唯一的情况,我很乐意这样做: 你的问题在很多方面缺乏细节。我将假设您将定期调用PHP脚本。我将假设posts表有

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

但是,为了提高效率,我只想向数组中添加新结果,而不想查看现有的帖子

就目前情况而言,我尝试使用时间,即从表中选择*,其中时间>=$time,但是,我已经意识到它的局限性,无法符合我最初的想法


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

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

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,
));
?>

这个主题有很多变体。

你的问题缺乏很多细节。我将假设您将定期调用PHP脚本。我将假设posts表有一个自动递增的ID。这样,您就可以将它传递给查询并获得新的posts

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,
));
?>

此主题有许多变体。

如果您的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>
只需查找id大于页面上最后一个id的新帖子,并将新帖子作为HTML返回即可


更新如果您的帖子按时间倒序排列,请使用:first而不是:last,使用prepend而不是append

如果您的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>
只需查找id大于页面上最后一个id的新帖子,并将新帖子作为HTML返回即可


更新如果你的帖子按时间倒序排列,请使用:first而不是:last,prepend而不是append

使用时间戳有什么问题?理论上,没有什么问题。我只是还没有找到一个使用它的方法符合我的要求和检索帖子的方法。使用时间戳有什么错?理论上,没有什么。我只是没有找到一个使用它的方法,它符合我的要求和检索帖子的方法。嘿,道格,我知道你很久以前发布过这个,但是你能解释一下update.php是什么样子吗?嘿,道格,我知道你很久以前发布过这个,但是你能解释一下update.php是什么样子吗?