【问题标题】:I cant get data out of firebase in javascript我无法在 javascript 中从 firebase 中获取数据
【发布时间】:2014-12-01 01:21:56
【问题描述】:

我试图从 firebase 中获取数据,以便在 JS 编程的游戏中使用。问题是我永远无法获取数据。这是我在编辑器中添加的 JSON:

{xcord: 23, ycord: 3543}

这是我用来尝试获取数据的 JS 代码:

fb.on('child_added', function(snapshot) {
    obj = snapshot.val();
    alert(obj.xcord);
        c1.x = obj.xcord;
        c1.y = obj.ycord;
        stage.update();
});

当警报弹出时,我得到的只是“未定义”。有谁知道怎么回事?

【问题讨论】:

  • 因为(正如 Terry 所说)您共享的代码 sn-p 看起来不错,我们需要更多信息。如果您在 jsfiddle/plunkr/jsbin 中设置问题的小型重现,这可能是最快的。
  • 好的。我会做一点
  • 好的,所以我在 jsbin 上进行了尺寸标注,现在我得到了输出,但我无法从 json 中提取值!但是,我现在可以提醒整个 JSON 字符串。输出在这里:jsbin.com/xaxeqalevi/2 代码如下所示: var fb = new Firebase("thedatabase.firebaseio.com"); fb.on('child_added', function(snapshot) { var json = snapshot.val(); alert( json); });
  • 请编辑您的问题并将链接添加到 jsbin 和代码。评论对那些人来说不是一个好地方。

标签: javascript json firebase


【解决方案1】:

当我console.log你在 jsbin 中的数据时,它显示为:

{sfws: "{xcord: 23, ycord: 3543}", update: "{xcord:'3435'}", update2: "{xcord: 23, ycord: 3543}"}

注意到坐标周围的双引号了吗?这意味着它们是字符串,而不是 JSON 对象。

我猜你用这样的方式存储它们:

var coords = document.getElementById('editor').value; // read the text from the input
ref.set(coords);

您从输入中读取的任何值都将是一个字符串,即使在人眼看来它看起来非常接近 JavaScript 对象。

您需要将值从字符串转换为 JavaScript 对象,您可以使用 JSON.parse 轻松完成此操作。这要求您以正确的 JSON 格式输入对象,这意味着您需要将属性名称用双引号引起来:

'{"xcord": 23, "ycord": 3543}'

然后,您可以在将值发送到 Firebase 之前将此 JSON 解析回对象:

var text = document.getElementById('editor').value; // read the text from the input
var coords = JSON.parse(text);
ref.set(coords);

或者当您从 Firebase 检索字符串时:

fb.on('child_added', function(snapshot) {
    var text = snapshot.val();
    var obj = JSON.parse(text);
    alert(obj.xcord);
    c1.x = obj.xcord;
    c1.y = obj.ycord;
    stage.update();
})

快速修复(不推荐)

如果您懒得将数据转换为正确的 JSON,您也可以使用 eval 将其恢复原状。我强烈建议不要这样做,因为eval 不仅对引号不那么挑剔;它还将允许将代码片段注入您的页面。但是,如果您想忽略建议,这是快速解决方法:

fb.on('child_added', function(snapshot) {
    var text = snapshot.val();
    eval("obj = "+text);
    alert(obj.xcord);
    c1.x = obj.xcord;
    c1.y = obj.ycord;
    stage.update();
})

【讨论】:

  • 所以我尝试了代码 sn-p,它会在检索字符串时将字符串转换为一个值,但出现错误。更糟糕的是他们没有给我任何有用的信息。这是错误(来自 jsbin 控制台):“错误”“脚本错误。(第 0 行)”“错误”“脚本错误。(第 0 行)”“错误”“脚本错误。(第 0 行)”
  • 哦,对了……那是因为字符串不是有效的 JSON。在 JSON 中,属性名称用双引号括起来:{"xcord": 23, "ycord": 3543}。我会更新答案。
  • 哦,非常感谢您的帮助并与我一起解决问题!我理解它是一个肮脏的修复,但因为它是我试图为自己做的东西,所以我不太担心它,但我稍后会将它更改为正确的 JSON 读取函数,因为我只是试图用值测试它编辑器,它似乎改变了它。我检查了您的精彩回复/惊人的答案!再次,非常感谢!
【解决方案2】:

您的代码看起来不错。因为你的警报回来了'未定义'让我相信其他事情是错误的。您的 Firebase 路径是否正确?

【讨论】:

  • 是的,我相信,我的 URL 是这样的:myfirebase.firebaseio.com(当我编辑时也会出现警报,所以我认为 URL 是正确的)
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 2021-10-25
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多