我正在尝试创建一个简单的程序,该程序从用户那里获取名称,手机号码和电子邮件地址,然后将数据放在Firebase Realtime数据库中。

有3个输入框和一个按钮,单击它们即可执行上述操作。这是代码:

<input type="text" id="name">
<input type="text" id="mobile">
<input type="text" id="email">

<button type="button" id="button" onclick="addLead()">Submit</button>

我已经像这样设置了Firebase:
<script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>
<script>
  // Initialize Firebase
  var config = {
    ...
  };
  firebase.initializeApp(config);

  var database = firebase.database();
</script>

这是我的addLead()函数:
function addLead() {
    var clientName = document.getElementById('name').value;
    var clientMobile = document.getElementById('mobile').value;
    var clientEmail = document.getElementById('email').value;

    var newClientKey = database.ref().child('leads').push().key;
    database.ref('leads/'+newClientKey+'/name').set(clientName);
    database.ref('leads/'+newClientKey+'/mobile').set(clientMobile);
    database.ref('leads/'+newClientKey+'/email').set(clientEmail);
}

这就是我将数据放入数据库的方式。

javascript - 如何从Firebase数据库检索数据?-LMLPHP

因此,newClientKey生成了一些字符串,在插入时效果很好,但是现在如何检索呢? official documentation没有帮助。生成的字符串可能基于时间戳,如果是这种情况,则不可能再次生成它。

在检索唯一插入的唯一生成的字符串下的电子邮件,手机和名称时,我将如何访问?

按照上面的结构,我需要降低2级来访问所需的数据,并且由于缺乏文档,我不知道该怎么做,我不确定是否可以进行以下操作:
database.child().child();

最佳答案

这个问题的答案深埋在Firebase Database Reference中。forEach()用于在不知道 child 确切路径的情况下到达 child 。

var leadsRef = database.ref('leads');
leadsRef.on('value', function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var childData = childSnapshot.val();
    });
});

现在childSnapshot将包含所需的数据,也可以使用child_added访问相同的数据。
leadsRef.on('child_added', function(snapshot) {
      //Do something with the data
});

唯一的区别是,对于forEach(),它将从头开始循环遍历,因此,如果将添加任何新数据,它还将加载先前的数据,但是对于child_added而言,侦听器仅位于新的子对象上,而不是先前的子对象上现有的 child 。

10-08 08:05
查看更多