我正在构建一个基本论坛,其中每个帖子都包含一些文本,名字和姓氏,以及邮件的撰写日期。
我希望不断地使用AJAX更新主板,并在编写时动态添加新消息。
我有一个文件getlatest.php?date=...
,用于检索$_GET
到NOW()
中日期的所有邮件。
它将数据作为对象数组返回。最后,我对数据进行了JSON编码。
我从一些AJAX代码中调用此函数,如下所示:
setInterval("update()", 5000);
function update(){
$.get("getlatest.php", {
date: "2009-06-23_16:22:12" //this is just a date I
//entered for testing
}, function(forumdata){
//do something with forumdata here?
}, "json");
}
现在我的数据位于forumdata
内,如forumdata[0].first_name
等。
我现在想用PHP来显示评论,如下所示:
$forumdata = json_decode(forumdata);
foreach ($forumdata as $value)
{
$newpost = new Post($value); // Post being some class that gets the data from
// $value and converts it to HTML + CSS
$newpost->displayPost(); // some function that echo's the HTML
}
我意识到我在这里要完成的工作稍微不可行,因为PHP是一种服务器端语言,而且客户端的计算是在这一点,但是有一些方法(可能是通过AJAX吗?)我一旦我通过javascript检索它,可以使用PHP来管理数据吗?
我想要这样做的主要原因是我在javascript中完全缺乏知识,因此将forumdata
变量转换为HTML和CSS块的任何替代方案对我来说都很好。
答案 0 :(得分:2)
避免服务器和客户端之间的日期/时间不匹配的方法是让每个条目都具有唯一的ID。这样,您就可以给出特定记录而不是偏移的相对时间。 MySQL中的主键就是一个例子。
答案 1 :(得分:1)
您可以让getlatest.php返回HTML代码而不是JSON数据。这样,您只需将返回的HTML代码注入到文档中。
答案 2 :(得分:0)
您应该更改getlatest.php(或创建一个新文件getlatesthtml.php),以便返回displayPost()的HTML输出。然后“//在这里做一些有关forumdata的事情吗?”只需要在某处设置某个容器的.innerHTML。
答案 3 :(得分:0)
好吧,因为你不想使用太多的JavaScript(不要害怕流行的Libraries和Frameworks,这是一个非常容易学习的东西,并且可以通过管理来节省你很多麻烦服务器端的所有内容)您仍然可以输出HTML而不将其解码为JSON。 所以客户这样做:
setInterval("update()", 5000);
function update(){
$.get("getlatest.php", {
date: "2009-06-23_16:22:12" //this is just a date I
//entered for testing
}, function(forumdata){
//do something with forumdata here?
// e.g.
$("#forum_entries").prepend(forumdata);
}, "html");
}
PHP脚本(getlatest.php)就是这样做的:
<?php
$forumdata = find_posts_after_date($_GET('date'));
foreach ($forumdata as $newpost)
{
// Echos just the post specific HTML not a whole HTML page
$newpost->displayPost(); // some function that echo's the HTML
}
?>
由于书呆子已经建议您不应该使用日期,而是客户当前显示的帖子的latext唯一ID。
答案 4 :(得分:0)
我看到你已经接受了答案,但你可能想要学习解析json。有很多理由让你想让javascript处理数据的显示。考虑使用api的所有Web服务,它们返回一些xml或json。考虑到你现在使用jquery,它就像学习'each()'一样基本。我做了一些谷歌搜索,this链接看起来会让你开始。如果您需要更多帮助,请留下评论。