不能使用.once()函数从Firebase数据库读取数据
Can't read data from Firebase database with .once() function
我希望能够在按钮触发的onclick
事件上从Firebase
数据库读取一段数据。从通过文档和这样的似乎once()
函数是去这里的方式,因为我不是试图链接数据读取到任何特定的Firebase
事件,如添加一个孩子,而是当有人点击页面上的按钮。这里是我调用once()
的行…
curPoll.once('value', function(curPollSnapshot) {
numElections = curPollSnapshot.val().NumElections;
});
问题是我无法获得要读取的数据,即使curPoll
被设置为数据引用,numElections
是我脚本中的全局变量。numElections不断返回未定义。事实上,我甚至无法在FireBug中进入该函数,好像存在语法错误一样。如果有语法错误,我无法找出它,无论如何,我认为整个脚本在Firebug中根本无法加载,如果是这样的话。但是由于某些原因,我不能深入到函数中去看看是怎么回事。
这是设置curPoll的函数…
function createPoll()
{
var pollName = $('#txtCreatePoll').val();
if (pollName == "" || pollName == null)
{
alert("You must enter a name for your poll!");
return;
}
else
{
pollsRef = new Firebase('https://poll-database.firebaseio.com/Polls');
//TODO add error callback
curPoll = pollsRef.push({Name: pollName, Elections: null, NumElections: 0 });
elections = curPoll.push();
$('div#divCreateElections1').slideDown('slow');
}
}
可以看到,elections
引用作为curPoll
引用的子引用被推送到这里。
下面是我尝试从选举参考....读取数据的函数
function addElection()
{
curPoll.once('value', function(curPollSnapshot) {
numElections = curPollSnapshot.val().NumElections;
});
var electionName = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtCreateElection').val();
var numberToElect = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtNumElect').val();
if (electionName == "" || electionName == null)
{
alert("You must enter a name for your election!");
return;
}
}
正如我所说,numElections不断出现为未定义的。以下是我的firebase数据库的基本结构:
Poll-Database > Polls > Poll1
Poll2
...
Polln > Name
> NumElections
> Elections > Election1
> Election2
...
> Electionn
以防万一,这是我的页面主体…
<body>
<div id="divCreatePoll">
Enter Name of New Poll:
<input type="text" id="txtCreatePoll" value="" />
<br /><br />
<button id="btnCreatePoll" onclick="createPoll(); return false;">CREATE POLL</button>
<p id="pError"></p>
</div>
<div id="divCreateElections1">
Enter Election Name:
<input type="text" id="txtCreateElection" value="" />
<br /><br />
Enter Number of Candidates to Elect:
<input type="text" id="txtNumElect" value="" />
<br /><br />
<button id="btnCreateElection" onclick="addElection(); return false;">CREATE ELECTION</button>
<br /><br />
<p id="pError"></p>
</div>
</body>
问题是once
是一个异步调用。所以它不会立即设置numElections
。因此,当您使用numElections时,它还没有被设置。
你只需要把剩下的代码也移到回调中。
function addElection() {
curPoll.once('value', function(curPollSnapshot) {
numElections = curPollSnapshot.val().NumElections;
var electionName = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtCreateElection').val();
var numberToElect = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtNumElect').val();
if (electionName == "" || electionName == null)
{
alert("You must enter a name for your election!");
return;
}
});
}
相关文章:
- 如何在网站中显示Firebase数据库中的数据
- 在 HTML 表格中显示从 Firebase 数据库中检索到的信息
- 如何通过Firebase数据库中的AngularJS在点击时获取数组元素的唯一ID
- 如何将javascript/angular.js游戏板连接到firebase数据库
- 如何获取firebase数据库的主要对象
- Firebase事务不会更新Firebase数据库中的实际值
- 连接firebase数据库到chrome扩展
- 如何在Firebase数据库中更新子数据库的特定值
- 聚合物:不使用firebase元素更新firebase数据库
- 不能使用snap.val()更新Firebase数据库对象
- 不能使用.once()函数从Firebase数据库读取数据
- 如何用优先级排序和浅参数查询Firebase数据库
- 在React Native中从Firebase数据库/存储中加载并返回图像
- 向firebase数据库添加身份验证数据
- 在Firebase数据库中单击AlertDialog以设置值时出错
- 无法将新用户持久化到Firebase数据库
- 循环遍历Firebase数据库记录的集合
- 从Firebase数据库中删除ref的子对象
- 如何在Firebase数据库上获得仅更改的值
- React应用程序和Firebase数据库之间的同步状态