Ajax自动刷新评论墙

时间:2015-02-28 16:13:17

标签: javascript php jquery ajax

好吧,经过几天的搜索和阅读后,我仍然无法让这个工作,所以这是我最后的机会。请记住,我是Ajax和JS的新手。

我有一个评论墙,您可以在页面上向其他人留下一个漂亮的小消息,它工作得很好但现在我想添加一些ajax,所以它每10秒自动刷新一次,并获得最新的评论。

问题是我将整个网站显示在div内,而不是评论。

我有一个带有以下代码的js文档

  (function update() {
    $.ajax({
        type : 'GET',
        url : 'index.php',
        success : function(data){
            $('#cmt_wall_container').html(data);
        },
    }).then(function() {
       setTimeout(update, 10000);
    });
})(); 

我的Index.php页面包含以下内容

<?php include_once 'connect.php'; ?>
<?php 
$cmt_list = "";
$sql = mysqli_query($con, "SELECT * FROM cmt ORDER BY id DESC LIMIT 10");
$cmtCount = mysqli_num_rows($sql);
if($cmtCount > 0){
    while($row = mysqli_fetch_array($sql)){
       $id = $row["id"];
       $comment = $row["comment"];
       $cmt_list .="<div class='post-container'><p class='post-comment'>$comment</p></div>";
}
} else {
    $cmt_list = "leave a comment";
}
?>

<head>stuff..</head>
<body>
    <div id="cmt_wall_container">
        <?php echo $cmt_list; ?>
    </div>
</body>

我希望这很清楚! 非常感谢你提前,你真的是我最后的希望!!!!!

2 个答案:

答案 0 :(得分:0)

在这些方面尝试更多内容......

THE JS SCRIPT:

function update() {
    $.post( "index.php", { grab: "comments"}).done(function( data ) {
        $('#cmt_wall_container').html(data);
        setTimeout(update, 10000);
    });
}

PHP SCRIPT:

<?php 
    include_once 'connect.php'; 

    $cmt_list = "";
    $sql = mysqli_query($con, "SELECT * FROM cmt ORDER BY id DESC LIMIT 10");
    $cmtCount = mysqli_num_rows($sql);
    if($cmtCount > 0){
        while($row = mysqli_fetch_array($sql)){
           $id = $row["id"];
           $comment = $row["comment"];
           $cmt_list .="<div class='post-container'><p class='post-comment'>$comment</p></div>";
    }
    } else {
        $cmt_list = "leave a comment";
    }
    // Return Results To Ajax And Exit
    if (isset($_POST['grab']) && $_POST['grab']==="comments") {
        echo $cmt_list;
        exit;
    } // Else Load Page As Normal
?>
<head>stuff..</head>
<body>
    <div id="cmt_wall_container">
        <?php echo $cmt_list; ?>
    </div>
</body>

通过使用isset,您可以检测您是否从ajax请求并仅返回注释,否则您正常加载页面的重置..它的一种方法/方法。

注意这仍然适用于$ _GET ..如果需要,只需将$ _POST更改为$ _GET,但是使用退出选项..你不需要将整个网站包装在else语句中..它更干净

因此,将您的ajax网址更改为index.php?grab = comments并将其添加到您的PHP代码下方。

    if (isset($_GET['grab']) && $_GET['grab']==="comments") {
        echo $cmt_list;
        exit;
    } 

通过使用此方法,您还可以使用grab = admin_comments或您希望的方式来控制您的评论。

答案 1 :(得分:0)

它应该像8BitProgrammer建议的那样工作

(function update() {
  $.ajax({
    type : 'GET',
    url : 'index.php?comments=true',
    success : function(data){
      $('#cmt_wall_container').html(data);
    },
  }).then(function() {
    setTimeout(update, 10000);
  });
})(); 

PHP:

<?php include_once 'connect.php'; ?>
<?php 
$cmt_list = "";
$sql = mysqli_query($con, "SELECT * FROM cmt ORDER BY id DESC LIMIT 10");
$cmtCount = mysqli_num_rows($sql);
if($cmtCount > 0){
    while($row = mysqli_fetch_array($sql)){
       $id = $row["id"];
       $comment = $row["comment"];
       $cmt_list .="<div class='post-container'><p class='post-      comment'>$comment</p></div>";
}
} else {
$cmt_list = "leave a comment";
}

if ($_GET["comments"]):
?>
    <?php echo $cmt_list; ?>
<?php
else :
?>
    <head>stuff..</head>
    <body>
        <div id="cmt_wall_container">
            <?php echo $cmt_list; ?>
        </div>
    </body>
<?php
endif;
?>