【问题标题】:After adding data in firebase database my html table not update in realtime在firebase数据库中添加数据后,我的html表没有实时更新
【发布时间】:2021-01-16 14:06:56
【问题描述】:

我正在开发一个 JavaScript 项目,在该项目中我创建了一个 html 表并显示来自运行良好的 firebase 数据库的表数据,我的问题是当我通过 html 页面在我的 firebase 数据库中添加数据时,它成功存储在 firebase 数据库中但是我的html表没有实时更新,刷新页面后显示,下面我添加我的js代码

database.once("value").then(function(snapshot){
    if (snapshot.exists()){
        snapshot.forEach(function (childSnapshot) {
        var childKey = childSnapshot.key;
        var childData = childSnapshot.val();

        var row = tblUsers.insertRow(rowIndex);
        var cellName = row.insertCell(0);
        var cellButtons = row.insertCell(1).outerHTML =
            "<tr id='row" + rowIndex + "'><td><input type='button' value='Delete' class='delete' onclick=\"delete_row('" + childKey + "')\"></td></tr>";

        cellName.appendChild(document.createTextNode(childData.desc));
        rowIndex = rowIndex + 1;
        document.getElementById("empty_data").style.visibility = "hidden";
    });
    } else{
        document.getElementById("empty_data").style.visibility = "visible";
    }
});

任何人都可以帮助解决问题

【问题讨论】:

  • 请查看我刚刚对您的问题所做的编辑,因为之前的编辑您的问题没有显示代码中最重要的行。

标签: javascript html database firebase firebase-realtime-database


【解决方案1】:

当您使用once() 附加侦听器时,它会读取一次值(顾名思义),然后停止侦听更改。如果您想继续监听更改,请改用on()

这也意味着你不能再使用then(),因为on()会导致多次获取数据,所以它不会返回一个promise(只能调用一次)。

因此,更改应仅限于您共享的代码的第一行,如下所示:

database.on("value", function(snapshot){
  ...

【讨论】:

  • 感谢您的回复,我已经尝试过了,它可以工作,但问题是它多次添加相同的值:(
  • 是的没错,我也这么想,但我不知道如何清除表格数据?
  • 这取决于您的 HTML,不幸的是我无法从您发布的代码中弄清楚。可能是tblUsers.clear()tblUsers.innerHTML = "" 之类的东西。但是搜索“如何从我的 HTML 表中清除动态行”应该会给你很好的答案,而我的答案集中在你在这里发布的问题上:我如何从 Firebase 获取实时数据更新。
猜你喜欢
  • 2021-10-31
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 2022-01-21
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多