数据库值为1时index.php页面无法自动刷新问题求助
问题描述
我想要实现一个系统,当数据库tickets_update表的condicao字段值为1时,自动刷新index.php页面。目前所有PHP代码功能正常,但index.php页面无法触发自动刷新。
现有代码
index.php
<script> inverval_timer = setInterval(function update() { $.get("base_de_dados/update/loadMensagens.php", function(data) { $("#numseiCategoria").html(data); window.setTimeout(update); }) }, 5000); </script>
loadMensagens.php
<?php include_once '../bdados.php'; $fila = $conn->query("SELECT * FROM tickets_update"); while($Filas = $fila->fetch_assoc()){ $condicao = $Filas['condicao']; } if($condicao == 1){ $condicao = 0; $queryAtualizar = $conn->query("UPDATE tickets_update SET condicao='$condicao'"); echo " <div id='a'></div> <script> $.ajax({url:'updateMensagens.php', success:function(result){ $('#a').html(result) }}); </script>"; } ?>
updateMensagens.php
<script> $(document).ready(function(){ location.reload(); }); </script>
问题原因
- 脚本执行上下文异常:
loadMensagens.php返回的JS代码发起AJAX请求获取updateMensagens.php,再将返回的刷新脚本插入页面。这种嵌套的脚本插入方式会导致location.reload()的执行时机和上下文出错,无法正确触发页面刷新。 - 定时器重复调用:
setInterval已经设置了5秒循环执行,又在回调里调用window.setTimeout(update),会导致定时器叠加,引发逻辑混乱。
修复方案
简化流程,直接在index.php的AJAX回调中根据返回值判断是否刷新页面,无需嵌套AJAX和脚本插入:
修改后的loadMensagens.php
<?php include_once '../bdados.php'; $fila = $conn->query("SELECT * FROM tickets_update"); $condicao = 0; while($Filas = $fila->fetch_assoc()){ $condicao = $Filas['condicao']; } if($condicao == 1){ $condicao = 0; $queryAtualizar = $conn->query("UPDATE tickets_update SET condicao='$condicao'"); // 返回需要刷新的标识 echo "need_refresh"; } else { // 返回原本需要更新的内容(无内容则返回空) echo ""; } ?>
修改后的index.php
<script> // 仅保留一个setInterval定时器 setInterval(function() { $.get("base_de_dados/update/loadMensagens.php", function(data) { $("#numseiCategoria").html(data); // 判断返回值是否为刷新标识 if (data.trim() === "need_refresh") { location.reload(); } }) }, 5000); </script>
说明
- 移除冗余的
setTimeout调用,避免定时器叠加问题。 loadMensagens.php不再返回嵌套的HTML和JS,直接返回简单标识字符串,逻辑更清晰。- 在
index.php的AJAX回调中直接判断标识,触发页面刷新,执行上下文正确,能确保刷新生效。
内容的提问来源于stack exchange,提问作者Volttzz Beats
相关产品推荐
相关产品推荐

