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

如何解决PHP加载MySQL数据的Datatable定时刷新无法获取最新值的问题

问题解决方案

核心错误原因

你的代码逻辑混淆了服务端代码(PHP)和客户端代码(JS)的执行时机:PHP代码仅在页面首次请求服务端时执行一次,渲染到浏览器后所有PHP逻辑已经结束,你写在setInterval里的PHP代码实际在页面加载时就已经生成了固定值,后续JS定时执行时不会重新触发服务端的MySQL查询,因此永远拿不到最新数据。

调整后的实现代码

1. 修改data.php,让它独立返回JSON格式数据

<?php
include "connect.php";
// 声明返回数据格式为JSON
header('Content-Type: application/json');
$sqlAdmin = mysqli_query($connection, "SELECT FROM_UNIXTIME(lastChange) as new_date,pair, percentage, delta_t, current_price, last_price FROM testdatabase.table ORDER BY id DESC LIMIT 0,100;");    
$locations = array();
while($res = mysqli_fetch_array($sqlAdmin)) {
    $locations[] = array($res['new_date'], $res['pair'], $res['percentage'], $res['delta_t'], $res['current_price'],$res['last_price']);
}
// 直接输出JSON数据,供前端异步调用
echo json_encode($locations);
exit;
?>

2. 修改index.php的JS逻辑,用AJAX异步拉取数据更新表格

原HTML结构和首次引入data.php的逻辑不用动,仅修改JS部分即可:

// 初始化Datatable,保留首次加载逻辑
var table = $('#example').DataTable({
    data: <?php echo json_encode($locations); ?>,
    // 你的其他Datatable配置项保持不变
});

// 定时刷新逻辑
var refreshId = setInterval(function() {
    // 异步请求data.php获取最新数据
    $.getJSON('data.php', function(newData) {
        console.log('Refresh ... ', newData);
        // 调用Datatable官方API更新数据,无需重新初始化表格
        table.clear();
        table.rows.add(newData);
        table.draw();
    });
}, 5000);

实现说明

  • 不需要将整个Datatable放到独立PHP文件刷新,异步拉取数据局部刷新的性能更好
  • 调整后data.php只负责提供数据,和页面渲染逻辑解耦,后续维护更方便
  • 直接调用Datatable自带的API更新数据,保留你已经配置的排序、分页等所有特性,不会出现重新初始化表格的闪烁问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:45:05