我试图从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();
});
当警报弹出时,我得到的只是“取消”'。任何人都知道什么是错的?
答案 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;让我相信别的东西是错的。你的火力通道的路径是否正确?