Firebase Database无法获取数据:无报错但未返回数据求助
看起来你遇到了Firebase Realtime Database读取数据的常见问题——代码没报错,但就是拿不到预期的数据。我帮你梳理几个关键的排查点,一步步来定位问题:
先确认数据库路径是否完全匹配
Firebase的节点路径是大小写敏感的,你传入的qId是"NVR1",切片得到的gotQType是"NVR",那数据库里的结构是不是严格对应questions/NVR/NVR1?要仔细检查节点名称的拼写、大小写,比如有没有把NVR写成nvr,或者NVR1的后缀写错了?添加调试日志,看清回调内部的情况
你可以在回调函数里加几个console.log,直接看到数据读取的状态:function startTest(qId) { var gotQType = qId.slice(0, 3); firebase.database().ref().child("questions").child(gotQType).child(qId).on('value', function(snapshot) { // 打印回调是否触发,以及数据是否存在 console.log("回调已触发,数据是否存在:", snapshot.exists()); // 打印当前查询的完整路径,和数据库里的路径对比 console.log("当前查询路径:", this.ref.toString()); var datas = snapshot.val(); console.log("获取到的数据对象:", datas); if (datas) { // 先判断数据存在再赋值 var qTitle = datas.questionTitle; var explan = datas.explanation; var imageUrl = datas.questionImageUrl; $("#questionimg").attr("src", imageUrl); } }); } startTest("NVR1");打开浏览器控制台,看看这些日志输出:如果回调没触发,可能是路径错了或者初始化有问题;如果
snapshot.exists()返回false,说明路径对应的节点确实没有数据;如果能打印出datas,那可能是后续赋值的逻辑有问题(比如DOM元素#questionimg不存在)。检查Firebase安全规则
这是最容易忽略的点!如果你的数据库安全规则限制了读取权限(比如只允许认证用户读取),而当前用户没有登录,即使数据存在,前端也拿不到任何数据,而且不会报错。你可以临时把规则改成测试用的开放规则(测试完一定要改回安全规则):{ "rules": { ".read": true, ".write": true } }改完后重新测试,如果能拿到数据了,就说明是规则的问题,后续再根据需求配置合适的安全规则。
确认Firebase初始化是否正确
你有没有在页面中正确初始化Firebase?比如有没有引入Firebase SDK,有没有配置正确的apiKey、authDomain、databaseURL等参数?如果初始化时连接的是另一个Firebase项目的数据库,自然找不到你要的数据。检查DOM元素是否存在
如果前面的步骤都没问题,那看看$("#questionimg")是不是能找到对应的DOM元素?如果这个元素不存在,即使拿到了imageUrl,也看不到图片加载的效果,可能会误以为没拿到数据。
内容的提问来源于stack exchange,提问作者Benjamin Sommer

