#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.