После добавления данных в базу данных firebase моя html-таблица не обновляется в режиме реального времени

#javascript #html #database #firebase #firebase-realtime-database

#javascript #HTML #База данных #firebase #firebase-realtime-database

Вопрос:

Я работаю над проектом JavaScript, в котором я создаю таблицу html и показываю данные таблицы из базы данных firebase, которая работает нормально, моя проблема в том, что когда я добавляю данные в свою базу данных firebase через html-страницу, они успешно сохраняются в базе данных 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";
    }
});
 

Кто-нибудь помогает решить проблему

Комментарии:

1. Пожалуйста, взгляните на правку, которую я только что внес в ваш вопрос, так как до этого редактирования в вашем вопросе не отображалась самая важная строка вашего кода.

Ответ №1:

Когда вы подключаете прослушиватель с once() помощью is, он считывает значение один раз (как следует из его названия), а затем прекращает прослушивание изменений. Если вы хотите продолжить прослушивание изменений, используйте on() вместо этого.

Это также означает, что вы больше не можете использовать then() , что on() может привести к получению данных несколько раз, поэтому он не возвращает обещание (которое может быть вызвано только один раз).

Таким образом, изменение должно быть ограничено первой строкой кода, которым вы поделились, и выглядеть следующим образом:

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

Комментарии:

1. спасибо за ответ, я уже пробовал, и это работает, но проблема в том, что он добавляет одно и то же значение несколько раз: (

2. да, я тоже так думаю, но я не понимаю, как очистить данные таблицы?

3. Это зависит от вашего HTML, который, к сожалению, я не смог понять из опубликованного вами кода. Что-то вроде tblUsers.clear() или tblUsers.innerHTML = "" может быть так. Но поиск «как очистить динамические строки из моей HTML-таблицы» должен дать вам хорошие ответы на этот вопрос, в то время как мой ответ был сосредоточен на вопросе, который вы разместили здесь: как мне получать обновления данных в реальном времени из Firebase.