在SO上有几个这样的问题,但没有一个答案对我有用.我试过了所有这些.
我试图最小化我粘贴的代码,但这个脚本很难
我有一个评论表单,通过ajax提交到php脚本,保存评论,然后获取所有评论并重新显示它们,以便可以显示新评论而无需刷新页面.
有时,评论会成功提交到数据库并正确重新显示.通常几乎所有其他提交评论都会被保存.每隔一段时间似乎都没有发生.
我真正的问题是每次提交时都没有保存评论.
这是javascript和ajax调用:
$(document).ready(function(){
var working = false;
$('#commentForm').submit(function(e){
if(working) return false;
working = true;
$('#submitComment').val('Working..');
$('span.error').remove();
$.post('/ajax/comment.process.php',$(this).serialize(),function(msg){
working = false;
$('#submitComment').val('Submit');
if(msg.status){
$('#commentArea').slideDown().$(msg.html).prepend('#commentArea');
$('#blogComment').val('');
}
else {
$.each(msg.errors,function(k,v){
$('label[for='+k+']').append('<span class="error">'+v+'</span>');
});
}
},'json');
});
});
这是提交评论的功能:
public function addComment($user_id) {
$validate = new data_validation;
$_POST = $validate->sanitize($_POST);
$newCom = $_POST['blogComment'];
$blog_id = intval($_POST['blogID']);
$photoSubmit = $_POST['comPhoto'];
$newComQuery = $this->mysqli->query("INSERT INTO b_comments (blog_id, user_id, date, content, photo) VALUES ('".$blog_id."', '".$user_id."', Now(), '".$newCom."', '".$photoSubmit."')");
if($newComQuery === false) {
echo "Query failed";
}else{
$returnCom = $this->comMarkup($blog_id);
echo $returnCom;
}
}
这是comMarkup()函数的一部分,它回应了注释(它只是重要的部分):
// This method outputs the XHTML markup of the comment
public function comMarkup($blog_id) {
$sql = $this->mysqli->query("SELECT * FROM b_comments WHERE blog_id = '".$blog_id."' ORDER BY date DESC");
while($d = $sql->fetch_assoc()) {
$d = $validate->sanitize($d);
echo "
<div class='comment-block'>
<span class='com-img'><img src='".$photo_path."' /></span>
<h3 style='display: inline;'><a href='".$profile."'>".$userName."</a></h3>
<div class='com-date'>".$d['date']."</div>
<p>".$comContent."</p>
</div>
";
}
}
编辑:这是请求的comment.process.php代码:
session_start();
include_once('../classes/comment.class.php');
include_once('../classes/db.class.php');
include_once('../classes/user.class.php');
$user_id = $_SESSION['user_id'];
$db = new DBConnection;
$comments = new Comment($db);
$user = new User($db);
$blogID = intval($_POST['blogID']);
$addCom = $comments->addComment($user_id);
echo json_encode(array('status'=>1,'html'=>$addCom));
最佳答案 根据您的描述,我的猜测是它与您的工作变量有关,以及它在$.post()结尾处未设置为false的事实.
但是,您制定流程的方式存在一些逻辑,效率和可管理性问题.我建议看一下official jQuery docs for $.post(),特别是.done(),. fail()和.always()链式方法.
我还建议将PHP变量命名为$_POST以外的其他东西,这样就不会与PHP超级全局混淆.
最后,我建议将您的评论视为对象并使用PDO(这是PDO的链接:查询作为一种“沉浸式”方法,但一定要阅读所有文档).它将为您节省大量数据库交互的麻烦.