[英]calling php from js (w/ ajax)
我正在建立一个基本论坛,每个帖子都包含一些文本,名字和姓氏以及消息的撰写日期。 我想不断用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吗?)可以使用PHP我通过javascript检索数据后,如何管理数据?
我想要这样做的主要原因是我对javascript完全缺乏知识,因此将forumdata
变量转换为HTML和CSS块的任何替代方法对我来说也非常forumdata
。
避免服务器和客户端之间日期/时间不匹配的方法是使每个条目都有唯一的ID。 这样,您就可以提供特定记录而不是相对时间来抵消。 MySQL中的主键就是一个例子。
您可以让getlatest.php返回HTML代码而不是JSON数据。 这样,您只需要将返回的HTML代码注入文档中即可。
您应该更改getlatest.php(或创建一个新文件getlatesthtml.php),以便它返回displayPost()的HTML输出。 然后“ //在这里使用forumdata做些什么?” 只需在某个地方设置某个容器的.innerHTML。
好吧,由于您不想使用太多的JavaScript(不要被流行的Libraries and Framework所吓倒,因此,这是一件非常容易学习的事情,并且可以通过管理所有内容来节省很多麻烦服务器端),您仍然可以只输出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
}
?>
正如书呆子所建议的那样,您不应使用“日期”,而应使用客户端当前显示的帖子的唯一文本ID。
我看到您已经接受了答案,但是您可能想考虑学习解析json。 有很多原因导致您希望让javascript处理数据显示。 考虑一下带有api的所有Web服务,它们返回某种xml或json。 考虑到您现在在使用jquery的位置,它与学习'each()'一样基本。 我做了一些谷歌搜索, 这个链接看起来会让您入门。 如果您需要更多帮助,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.