【发布时间】:2013-02-28 18:31:15
【问题描述】:
在 SO 上有几个这样的问题,但没有一个答案对我有用。我都试过了。
我试图最小化我正在粘贴的代码,但是这个脚本有点困难
我有一个评论表单,它通过 ajax 提交到一个 php 脚本,该脚本保存评论,然后获取所有 cmets 并重新显示它们,以便在不刷新页面的情况下显示新评论。
只有在某些时候,cmets 才能成功提交到数据库并正确重新显示。 通常几乎所有其他提交的评论都会被保存。每隔一段时间似乎什么都没有发生。
我真正的问题是每次提交时都没有保存 cmets。
这里是 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;
}
}
这是与 cmets 相呼应的 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));
【问题讨论】:
-
变量“working”似乎有问题。你确定它执行正确吗?
-
我想我不确定它是不是,但是我完全删除了它,它仍然无法正常工作。
-
你在哪里使用
$('#blogComment').val()? -
@Amir 我不明白你在问什么?
-
当您打开浏览器的开发者工具时,您是否看到单击提交按钮时发出的 ajax 请求。如果是这样,Web 服务器会返回 200,还是其他一些错误代码(如 500)?尝试首先找出问题所在。您总是可以通过使用提交到 /ajax/comment.process.php 的普通 html 表单创建一些简单的测试页面来消除 js/ajax
标签: php javascript jquery mysql ajax