我创建了一个由项目组成的网页,其中每个项目都包含一个文件列表。所有这些信息都是从MySQL数据库中获取的。我实现了一项功能,允许用户对每个文件发表评论并回复彼此的评论。我有一个名为“place comments”的php函数,它递归地为下面显示的每个文件放置注释。
对每个文件都执行此操作,并且使用while循环和一些回显html代码的语句,类似地替换每个文件。
但是,我遇到的问题是使用AJAX发布评论而不刷新页面。由于每个文件ID都不同,我必须使用特定的文件ID更新每个选择器,并为每个文件再次运行placeComments。
但是我不知道如何做到这一点。每次提交评论时,我都可以通过AJAX更新我的数据库。
我知道您可以执行以下操作,它会更新ID为“id”的任何选择器:
$(document).ready(function() {
$.get('comments.php', function (data) {
$('#id').html(data);
});
});
但我不确定如何为每个文件ID迭代地执行此操作,其中每个文件ID是一个php变量? 有没有办法可以通过PHP与JS通信,以便更新注释 对于所有文件ID?如果是这样,怎么样?
我意识到这是一个糟糕的设计,但我想在不从头开始我的项目的情况下这样做。
放置评论功能:
function placeComments($mysqli, $parentId, $fileId) {
$sql = "SELECT * FROM Comments WHERE parent = $parentId AND file = $fileId ORDER BY UNIX_TIMESTAMP(date) ASC";
$comments = $mysqli->query($sql);
while($comment = $comments->fetch_assoc())
{
echo '
<ul class="comments">
<li class="clearfix">
<div class="post-comments">
<p class="meta"> '. $comment['date'] .' <a href="#">'. $comment['username'] .'</a> says : <i class="pull-right">
<p>'
.
$comment['content']
.
'</i></p><br><br>';
echo '<div class = "col-sm-12 reply panel-group">';
echo '<div class="panel panel-default">';
echo '<p><a data-toggle="collapse" href="#'. $comment[
'file'] . '-' . $comment['id'] . '"> Reply </a></p>';
echo '<div id="'. $comment['file'] . '-' . $comment['id'] .'" class="panel-collapse collapse">';
echo '<div class="panel-body">';
if(isset($_POST['submitComment-' . $comment['file'] . '-' . $comment['id']]))
{
$user = $_POST['username'];
$content = $_POST['content'];
$fileId = $_POST['id'];
$parent = $_POST['parent'];
$date = date('Y-m-d H:i:s', time());
filterComment($mysqli, $fileId, $user, $parent, $content, $date);
}
echo '<form method="post" class="form-horizontal" id="commentForm" role="form">
<div class="form-group">
<div class="col-sm-10 form">
<h5><b> Name: <b></h5>
</div>
<div class="col-sm-10 form">
<textarea class="form-control" name="username" id="username" rows="1"></textarea>
</div>
<div class="col-sm-10 form">
<h5><b> Reply: <b></h5>
</div>
<div class="col-sm-10 form">
<textarea class="form-control" name="content" id="content" rows="3"></textarea>
</div>
<div>
<input class = "form-control" type = "hidden" value = '. $comment['file'] . ' name = "id" id = "id" />
</div>
<div>
<input class = "form-control" type = "hidden" value = '. $comment['id'] . ' name = "parent" id = "parent" />
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10 form">
<button class="btn btn-success btn-circle text-uppercase" type="submit" id="submitComment" name = "submitComment-'. $comment['file'] .'-' . $comment['id'] . '"><span class="glyphicon glyphicon-send"></span> Reply </button>
</div>
</div>
</form>';
echo '</div>';
echo '</div>';
echo '</div>';
echo '</div><br><br>';
placeComments($mysqli, $comment['id'], $comment['file']);
echo '</div>';
echo '</li>';
echo '</ul>';
}
$comments->free();
}