目前,我有一个Javascript(JQuery)前端,它定期向一个单独的PHP脚本发出请求,返回帖子。
但是,为了提高效率,我想简单地将新结果添加到数组中,甚至不查看现有帖子。
按照目前的情况,我试图用时间(即“SELECT * FROM table WHERE time> = $ time”)这样做,但是,已经意识到它的局限性和无法符合我最初的想法。
那里有什么想法吗?我更喜欢这样做,而不必将我的脚本改为使用XML来传输数据 - 但是,如果这是唯一的情况,我将很乐意承担责任。 :)
答案 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
代替:last
和prepend()
代替append()