无法使用JavaScript从Firebase读取数据

时间:2014-07-02 17:10:18

标签: javascript firebase

我正在尝试使用firebase中的push方法从firebase中读取数据。

以下是我做dat的方法:

var wishRef = new Firebase('https://burning-fire-1723.firebaseio.com/WishList');
wishRef.push({'user_id': user.email, 'text': wish});

正确插入。根据文档,我正在尝试根据电子邮件读取数据,如下所示:

new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
.startAt('italespinner@gmail.com')
.endAt('italespinner@gmail.com')
.once('value', function (snap) {
    console.log('accounts matching email address', snap.val())
});

但我得到的只是空。这是DEMO

1 个答案:

答案 0 :(得分:2)

这是你小提琴的代码:

new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
    .startAt('rodddy57@gmail.com')
    .endAt('rodddy57@gmail.com')
    .once('value', show);

function show(snap) {
    console.log(snap.val());
    $('pre').text(JSON.stringify(snap.val(), null, 2));
}

这是Firebase中WishList的数据结构:

{
  "-JQnCbOF1MNdvKUCdDNB": {
    "text": "Climb Hill",
    "user_id": "rodddy57@gmail.com"
  },
  "-JQnDG8uWWB167BSSEEI": {
    "text": "Deep Sea Diving",
    "user_id": "italespinner@gmail.com"
  },
  "-JQnDT7w1-K7VSnZNkVI": {
    "text": "KICK",
    "user_id": "italespinner@gmail.com"
  }
}

看起来您使用the Firebase push function添加了这些节点。此函数将为您添加的节点生成唯一名称。这样做的好处是您不必担心提出一个独特的名称。一个缺点是你无法控制生成的名称:这是一个毫无意义的模糊。

问题在于您使用startAtendAt的方式。 documentation for startAt说:

  

使用优先级和可选的子名称指定起点。如果没有提供参数,则起点将是数据的开头。

您传递给startAt的值既不是优先级,也不是Firebase中的名称。

如果您对startAtendAt发表评论,您会看到所有值都显示在pre中:

new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
    .once('value', show);
function show(snap) {
    console.log(snap.val());
    $('pre').text(JSON.stringify(snap.val(), null, 2));
}

一种解决方案是在添加数据时将电子邮件地址指定为优先级值。请参阅setPrioritysetWithPriority

更新

要在现有节点上设置优先级,我在你的小提琴中执行了这个功能:

function setPriorities() {
    var list = new Firebase("https://burning-fire-1723.firebaseio.com/WishList");
    list.on('child_added', function(snap) {
        list.child(snap.name()).setPriority(snap.val().user_id);
    });
}

它循环遍历WishList的所有子节点,并为每个子节点设置优先级。请注意,您只需要运行此功能一次,它只是为已经存在的数据添加优先级。通常,您在添加元素时指定优先级,因此以后不需要修复它。

如果你现在重新访问你的小提琴,你会发现它有效。