gpt4 book ai didi

php - Ajax 表单有时只提交

转载 作者:可可西里 更新时间:2023-11-01 07:37:30 25 4
gpt4 key购买 nike

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

最佳答案

根据您的描述,我的猜测是它与您的 working 变量有关,而且它在您的末尾未设置为 false $.post()

但是您制定流程的方式存在一些逻辑、效率和可管理性问题。我建议您查看 official jQuery docs for $.post() ,特别是 .done().fail().always() 链式方法。

我还建议将您的 PHP 变量命名为 $_POST 以外的名称,这样它就不会与 PHP super 全局变量混淆。

最后,我建议将您的评论视为一个对象并使用 PDO (这是 PDO:query 的链接,作为一种“沉浸式”方法,但请务必阅读所有文档)。它将为您省去数据库交互中的大量麻烦。

关于php - Ajax 表单有时只提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com