刷新浏览器会覆盖Firebase

时间:2018-05-22 03:01:48

标签: javascript firebase firebase-realtime-database

我是数据库世界的完全初学者。我正在尝试使用Firebase数据库,这是我遇到的问题:我想创建一个简单的注册,用户应该写信息,这些信息应该存储在实时数据库中。也就是说,当用户输入他的信息并点击“注册”时,应该创建用户1,然后用户2输入他的信息并且应该创建用户2,但是所有用户必须是相同级别的“孩子”。一切似乎工作正常,我创建了一个对象(在Javascript中)然后我作为名为“用户1”的“子”添加到数据库,但是当我刷新页面并为用户2输入其他信息时,此信息覆盖了用户1的信息,但是当我只是从浏览器的输入字段中删除用户1的信息(不进行刷新)并输入用户2的信息时,它会创建第二个“子”,名为user 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只是输入字段和名为“注册”的按钮

1 个答案:

答案 0 :(得分:2)

重新加载页面时,会重新加载JavaScript并从头开始执行。它没有记住重新加载之前发生的事情。

这意味着该行再次执行:

var user_number = 0;

因此user_number再次从0开始计算。

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

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

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