我无法通过javascript从firebase获取数据

时间:2014-12-01 01:21:57

标签: javascript json firebase

我试图从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();
});

当警报弹出时,我得到的只是“取消”'。任何人都知道什么是错的?

2 个答案:

答案 0 :(得分:3)

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

{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();
})

答案 1 :(得分:1)

您的代码看起来不错。因为您的提醒回来了“未定义”#39;让我相信别的东西是错的。你的火力通道的路径是否正确?