2015-02-28 4 views
0

Хорошо, поэтому после нескольких дней поиска и чтения я до сих пор не могу заставить это работать, так что это мой последний шанс. Имейте в виду, что я новичок с Ajax и JS.Ajax auto обновить комментарий стена

У меня есть стена комментариев, на которой вы можете оставить приятное сообщение другим пользователям на странице, и это работает отлично, но теперь я хочу добавить 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> 

Я надеюсь, что это достаточно ясно! Спасибо вам большое за то, что вы действительно моя последняя надежда !!!!!

+1

Вы должны хранить PHP код, который выводит свои комментарии в другом файле, как comments.php. А затем в запросе AJAX измените url на url: 'comments.php'. И удалите PHP-код внутри div cmt_wall_container. –

+0

В этом случае вы можете работать с GET. Например, ваш url может быть index.php? Comments. А затем в PHP-коде индекса, php-файл вы можете проверить, получаете ли вы параметры GET «комментарии». if (isset ($ _ GET ["comments"])) {// только показывать комментарии ...} else {// показать всю страницу ...} –

+0

исправил мою другую проблему с php и попробовал это, но теперь мой div завершен пустой ..: / – Nilsson1188

ответ

0

Попробуйте что-то больше вдоль этих линий ...

THE JS СЦЕНАРИЙ:

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

РНР 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, если вам нужно, но с помощью опции выхода .. Вам не нужно обернуть весь сайт в другом заявлении .. его очиститель

Итак, измените URL-адрес ajax на index.php? Grab = comments и добавьте это под своим PHP-кодом.

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

Используя этот подход, вы также можете контролировать свои комментарии с опциями, как грейферный = admin_comments или как бы вы хотели.

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; 
?>