我将解释我的代码,然后在代码片段之后继续解决问题:
我有一个名为“functions_questions”的表单。当它被提交时,以下代码根据当前分数增加或减少我的sql数据库中的一个列(标题为“score”)(标题为“答案”)。
<?php
$id = $_SESSION['id'];
if(isset($_POST['functions_question'])){
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
if($data['score']<2)$db->query("UPDATE answers SET score = score+1 WHERE id=$id");
if($data['score']>1)$db->query("UPDATE answers SET score = score-1 WHERE id=$id");
}
?>
我还有以下AJAX代码,在提交表单时自动更改div(id =“ajaxtest”)中的文本。当然,这样做没有刷新页面,因为它使用AJAX。
<script type='text/javascript'>
$(document).ready(function () {
$('#questionform').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action') || window.location.pathname,
type: "POST",
data: $(this).serialize(),
success: function (data) {
ajaxtest.innerHTML = '"<?php echo $data['score']; ?>"';
},
});
});
});
</script>
最后,我有以下一些代码,它显示标题为“答案”的数据库中标题为“得分”的列中的值。
<?php
$resss = $db->query("SELECT * FROM answers WHERE id=$id");
$data = $resss->fetch_array();
var_dump($data['score']);
?>
当我提交表单时,我可以在数据库中看到分数已更新的管理员。 AJAX代码将div(ajaxtest)更改为$ data ['score'],但它会在更新之前显示前一个分数,而不是新更新的分数。如何修改此选项以便ajaxtest显示更新的分数而不是未更新的分数?
答案 0 :(得分:0)
嗯,这是因为语句ajaxtest.innerHTML = '"<?php echo $data['score']; ?>"';
会在提供文件后立即进行评估,从而转换为ajaxtest.innerHTML = <score when file was served>';
。
如果您想显示新值,那么您可以使用另一个异步请求(通常称为AJAX调用)检索它,或者返回代码中的值以管理调用和通过数据参数使用它:
修改强>
JS:
$(document).ready(function () {
$('#questionform').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action') || window.location.pathname,
type: "POST",
data: $(this).serialize(),
success: function (data) {
ajaxtest.innerHTML = data;
},
});
});
});
PHP:
<?php
$id = $_SESSION['id'];
if(isset($_POST['functions_question'])){
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
if($data['score'] < 2)
$db->query("UPDATE answers SET score = score+1 WHERE id=$id");
if($data['score'] > 1)
$db->query("UPDATE answers SET score = score-1 WHERE id=$id");
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
echo $data['score'];
}
它是这样的:
您可以通过启用开发人员工具(通常是ctrl + shift + i)和“网络”来检查Chrome中的AJAX请求结果。选项卡启用XHR。
答案 1 :(得分:0)
只需更改您的PHP代码: -
<?php
$id = $_SESSION['id'];
if(isset($_POST['functions_question'])){
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
if($data['score']<2)$db->query("UPDATE answers SET score = score+1 WHERE id=$id");
if($data['score']>1)$db->query("UPDATE answers SET score = score-1 WHERE id=$id");
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
}
?>
它可能对你有帮助。
我在更新新记录后得到分数。