我是数据库领域的一个完整的初学者。我正在尝试使用Firebase数据库,这是我遇到的问题:我想创建一个简单的注册,用户应在其中编写信息,并将此信息存储在实时数据库中。也就是说,当用户输入他的信息并单击“注册”时,应创建用户1,然后用户2输入他的信息,并应创建用户2,但是所有用户都必须是同一级别的“孩子”。一切似乎都工作正常,我创建了一个对象(使用Javascript),然后以名为“用户1”的“孩子”的身份添加到数据库中,但是当我刷新页面并为用户2输入其他信息时,此信息覆盖了用户1的信息,但是当我只是从浏览器的输入字段中删除用户1的信息(不刷新)并输入用户2的信息时,它会创建第二个名为用户2的“孩子”,这正是我想要的成为。问题是为什么刷新浏览器会覆盖以前的信息。这是我的js代码:
function submitClick(x){
var firebaseRef = firebase.database().ref();
user_number ++;
firebaseRef.child("user" + " " + user_number).set(x);
}
function signup(){
var first_name = document.getElementById("first_name").value;
var last_name = document.getElementById("last_name").value;
var username = document.getElementById("user_name").value;
var password = document.getElementById("password").value;
var obj = {
First_Name: first_name,
Last_Name: last_name,
Username: username,
Password: password
}
return obj;
}
var hold;
var user_number = 0;
submit_btn.onclick = function() {hold = signup(); submitClick(hold)};
而html只是输入字段和一个名为“ sign up”的按钮
最佳答案
重新加载页面时,JavaScript将重新加载并从头开始执行。它不存储您重新加载之前发生的情况。
这意味着该行再次执行:
var user_number = 0;
因此user_number
从0
重新开始计数。
解决此问题的最简单方法是使用Firebase的push()
方法:
function submitClick(x){
var firebaseRef = firebase.database().ref();
firebaseRef.push().set(x);
}
这会在根目录下生成一个新的唯一ID,并在其中设置用户。尽管这些所谓的推送ID不像您的号码那样容易阅读,但可以保证它们在重新加载,多个用户甚至离线/在线条件下都是唯一的。