Javascript 刷新浏览器会覆盖子项';Firebase中的s含量

Javascript 刷新浏览器会覆盖子项';Firebase中的s含量,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我是一个数据库领域的初学者。我正在尝试使用Firebase数据库,这里是我遇到的问题:我想创建一个简单的注册,用户应该在其中写入信息,这些信息应该存储在实时数据库中。也就是说,当用户输入他的信息并单击“注册”时,应该创建用户1,然后用户2输入他的信息并创建用户2,但所有用户都必须是同一级别的“childs”。一切似乎都很正常,我创建了一个对象(Javascript),然后作为名为“用户1”的“子对象”添加到数据库中,但当我刷新页面并为用户2输入其他信息时,该信息覆盖了用户1的信息,但当我只是从浏

我是一个数据库领域的初学者。我正在尝试使用Firebase数据库,这里是我遇到的问题:我想创建一个简单的注册,用户应该在其中写入信息,这些信息应该存储在实时数据库中。也就是说,当用户输入他的信息并单击“注册”时,应该创建用户1,然后用户2输入他的信息并创建用户2,但所有用户都必须是同一级别的“childs”。一切似乎都很正常,我创建了一个对象(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只是输入字段和一个名为“注册”的按钮,当你重新加载页面时,JavaScript会重新加载并从头开始执行。它对重新加载之前发生的事情没有记忆

这意味着该行将再次执行:

var用户_编号=0

因此,
user\u number
再次从
0
开始计数

解决此问题的最简单方法是使用Firebase的
push()
方法:

function submitClick(x){
    var firebaseRef = firebase.database().ref();
    firebaseRef.push().set(x);
}

这将在根目录下生成一个新的唯一ID,用于设置用户。虽然这些所谓的推送ID不像您的号码那么容易读取,但它们保证在重新加载、多个用户、甚至离线/在线情况下都是唯一的。

非常感谢。成功了。请再问一个问题。我们可以说firebaseRef.push()在根ref下创建了一个实例,然后使用set(x)将数据放在该实例下吗
push()
生成对新的唯一位置的引用。要了解更多信息,请参阅和