You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ajax实现Bootstrap卡片无刷新3秒自动更新MySQL数据问题排查

排查Ajax无刷新更新Bootstrap卡片的问题

让我帮你梳理下代码里的问题,一步步解决这个无刷新更新的故障:

1. Ajax请求参数设置错误

你当前的Ajax配置里,processData: false和contentType: false是专门用来处理**文件上传(FormData)**的场景,但你的请求只是普通的POST请求(还没传任何数据),这两个参数会导致请求格式异常,服务器无法正确解析请求。

修改后的Ajax代码,加上错误回调方便排查:

setInterval( (function x() { 
  $.ajax({ 
    type: "POST", 
    url: "vTagInfoCall.php", 
    // 删掉processData和contentType,用默认值即可
    success: function(result) { 
      $("#inputFieldDisplay").html(result); 
    },
    // 新增错误回调,控制台能直接看到请求失败的原因
    error: function(xhr, status, error) {
      console.error("Ajax请求出错:", status, error);
      console.error("服务器响应内容:", xhr.responseText);
    }
  }); 
  return x; 
})(), 3000);

2. PHP文件的输出与逻辑问题

你的vTagInfoCall.php有几个容易忽略的错误:

  • session_start()必须放在所有输出之前(包括ob_start()),否则会触发"headers already sent"的致命错误,导致内容无法正常输出;
  • 没有检查数据库连接和查询是否成功,万一数据库连不上或者SQL写错,你根本看不到错误;
  • ob_start()开启了输出缓冲,但没有用ob_end_flush()结束缓冲,可能导致内容无法正常发送到前端。

修改后的PHP代码:

<?php
// session_start必须放在最顶部,确保没有任何输出之前
session_start();
ob_start();
include "db.php";

// 先检查数据库连接是否成功
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

$tagQuery = "SELECT * FROM vtagdetails WHERE status = 0";
$tagQueryExecute = mysqli_query($conn, $tagQuery);

// 检查SQL查询是否执行成功
if (!$tagQueryExecute) {
    die("SQL查询失败: " . mysqli_error($conn));
}

$openItems = mysqli_num_rows($tagQueryExecute);
while($tagQueryRows = mysqli_fetch_array($tagQueryExecute)){
    $srNumber = $tagQueryRows['srNumber'];
    $Name = $tagQueryRows['Name'];
    $Code = $tagQueryRows['Code'];
    $customerName = $tagQueryRows['customers'];
    $Type = $tagQueryRows['Type'];
    
    echo '<form method="post"> 
            <div class="card cardBodyStyle"> 
                <div class="card-body"> 
                    <div class="row"> 
                        <input type="text" name="srNum" value="'.$srNumber.'" hidden> 
                        <input type="text" name="tpCode" value="'.$Code.'" hidden> 
                        <div class="col-sm"><i class="fab fa-500px"></i> '.$Name.'</div> 
                        <div class="col-sm"><i class="fas fa-atom"></i> '.$Type.'</div> 
                        <div class="col-sm"><i class="fas fa-globe fa-spin"></i> '.$customerName.'</div> 
                    </div> 
                </div>
            </div>
        </form><br>';
}

// 结束输出缓冲,确保内容全部发送到前端
ob_end_flush(); 
?>

3. 快速排查技巧

  • 先手动在浏览器地址栏访问vTagInfoCall.php,看看能不能正常输出卡片的HTML代码。如果访问时页面报错,那就是PHP代码的问题,根据报错信息调整即可;
  • 如果手动访问正常,再看浏览器控制台的错误信息(就是我们新增的error回调输出的内容),比如是不是请求路径错误(404)、跨域问题(同域下基本不会出现)。

额外优化建议

因为你只是获取数据,没有提交任何表单内容,其实可以把Ajax的type改成GET,这样更符合语义,PHP代码不需要做任何修改。

内容的提问来源于stack exchange,提问作者Anu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:10:04