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

如何使用JavaScript将Firebase实时数据库连接到DataTables?

DataTables结合Firebase实时数据库的问题修复

我在项目中尝试使用DataTables插件搭配Firebase实时数据库,但编写的代码无法满足项目所需的效果与功能。

原代码

$(document).ready(function() {
   var dbref   = firebase.database().ref('passengers');
   dbref.on('child_added',function(snapshot) {
      var config = {
     apiKey: "",
     authDomain: "",
     databaseURL: "",
     projectId: "",
     storageBucket: "",
     messagingSenderId: "",
     appId: "",
     measurementId: ""
  };
  firebase.initializeApp(config);

  
       var table =  $('#dataTable1').DataTable( {
           destroy: true,    
           "iDisplayLength": 5,
           "aLengthMenu": [
               [5, 10, 25, 50, -1],
               [5, 10, 25, 50, "All"]]
       });
       var dataSet = [snapshot.val().time, snapshot.val().temp, snapshot.val().date];
       table.rows.add([dataSet]).draw();
   });
});

运行结果

运行结果截图

问题点及修复方案

1. Firebase重复初始化

原代码在child_added事件触发时重复初始化Firebase,会抛出重复初始化的错误,且完全无必要。Firebase初始化只需执行一次,应放在事件监听逻辑之外。

2. DataTables重复创建表格

每次新增数据都销毁并重建表格,导致之前加载的数据被清空,最终表格仅显示最后一条数据(即截图呈现的情况)。正确做法是只初始化一次表格,后续仅向表格添加新行。

修复后的代码

$(document).ready(function() {
    // 初始化Firebase,仅执行一次
    var config = {
        apiKey: "",
        authDomain: "",
        databaseURL: "",
        projectId: "",
        storageBucket: "",
        messagingSenderId: "",
        appId: "",
        measurementId: ""
    };
    firebase.initializeApp(config);

    // 初始化DataTables表格,仅执行一次
    var table = $('#dataTable1').DataTable({
        "iDisplayLength": 5,
        "aLengthMenu": [
            [5, 10, 25, 50, -1],
            [5, 10, 25, 50, "All"]
        ]
    });

    // 监听passengers节点的新增数据(含已有数据的初始加载)
    var dbref = firebase.database().ref('passengers');
    dbref.on('child_added', function(snapshot) {
        var passengerData = snapshot.val();
        var dataSet = [passengerData.time, passengerData.temp, passengerData.date];
        table.rows.add([dataSet]).draw();
    });
});

额外注意事项

  • 确保HTML表格结构与数据列数对应,比如表格需包含3个表头<th>,分别对应时间、温度、日期。
  • child_added事件会先遍历节点下所有已有数据,再监听后续新增数据,修复后的代码会自动加载所有历史数据并实时更新新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:05:28