从js调用php(使用/ ajax)

时间:2009-06-30 13:30:21

标签: php javascript ajax

我正在构建一个基本论坛,其中每个帖子都包含一些文本,名字和姓氏,以及邮件的撰写日期。 我希望不断地使用AJAX更新主板,并在编写时动态添加新消息。 我有一个文件getlatest.php?date=...,用于检索$_GETNOW()中日期的所有邮件。 它将数据作为对象数组返回。最后,我对数据进行了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块的任何替代方案对我来说都很好。

5 个答案:

答案 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链接看起来会让你开始。如果您需要更多帮助,请留下评论。