【问题标题】:Unable to push data to Firebase onclick无法将数据推送到 Firebase onclick
【发布时间】:2016-03-13 13:15:51
【问题描述】:

所以我最近一直在搞乱 Firebase,遇到了一个需要帮助解决的问题。所以我试图将用户输入的数据发送到 Firebase,并让该数据显示在指定的 div 中,但数据没有显示在我的 Firebase 或那个 div 中......

这是我的 HTML 代码:

<form>
    <input name="name" class="form-control" type="name" placeholder="Title" id="titleInput" />
    <br/>
    <textarea id="postInput" name="content" data-provide="markdown" rows="10"></textarea>
    <hr/>
    <button type="submit" class="btn" onclick="submitPost()">Submit</button>
</form>

还有我的 JQuery 代码(已编辑):

function submitPost() {
     var myDataRef = new Firebase('https://EXAMPLE.firebaseio.com/');
     var name = $('#titleInput').val();
     var text = $('#postInput').val();
     myDataRef.push({name: name, text: text});
     $('#postInput').val('');

     myDataRef.on('child_added', function(snapshot) {
          var post = snapshot.val();
          displayUserPost(post.name, post.text);
     })
     function displayUserPost(name, text) {
         $('<div/>').text(text).prepend($('<em/>').text(name+': ')).appendTo($('#PostsDiv'));
         $('#PostsDiv')[0].scrollTop = $('#PostsDiv')[0].scrollHeight;
     }
 };

【问题讨论】:

  • 抱歉,* 不是一个很好的调试媒介。您是否在submitPost() 方法中设置了断点,如果设置了,它会被触发吗?如果是这样,nametext 的值是否从输入中正确读取?如果是这样,JavaScript 控制台中是否显示任何错误消息?
  • 一个问题:你的变量被命名为post:var post = snapshot.val();,但是你尝试从message:displayUserPost(message.name, message.text);读取属性
  • @FrankvanPuffelen 所以我已经修复了如上所示的代码。我在本地再次尝试,这一次,帖子出现了一瞬间,然后页面重定向到/index.html?name=Test&amp;content=Test。数据仍然不在 Firebase 中...而且没有断点,控制台也没有显示任何错误。
  • 因为你的按钮是submit类型的,它会提交表单,刷新页面。如果您将按钮的类型更改为button,它应该停止这样做。

标签: javascript jquery html firebase


【解决方案1】:

您正在处理异步数据流,因此您应该在 submitPost 函数之外监听数据。

var myDataRef = new Firebase('https://EXAMPLE.firebaseio.com/');
myDataRef.on('child_added', function(snapshot) {
  var post = snapshot.val();
  displayUserPost(post.name, post.text);
});

function submitPost(e) {
  var myDataRef = new Firebase('https://EXAMPLE.firebaseio.com/');
  var name = $('#titleInput').val();
  var text = $('#postInput').val();
  myDataRef.push({name: name, text: text});
  $('#postInput').val('');
  e.preventDefault();
}

function displayUserPost(name, text) {
  $('<div/>').text(text).prepend($('<em/>').text(name+': ')).appendTo($('#PostsDiv'));
  $('#PostsDiv')[0].scrollTop = $('#PostsDiv')[0].scrollHeight;
}

【讨论】:

  • 谢谢!太感谢了!事实上,为了表达我的感激之情,我想与您分享link,这将与您一起使用!谢谢!课程即将结束,但你在它结束之前就提供了帮助!我很感激! 13 岁的时候,我没有多少人可以问这些问题,因为我这个年龄的大多数孩子都喜欢整天玩游戏。再次感谢一百万!
  • 看起来棒极了!很高兴看到你这么年轻就参与其中。随时提出更多问题。尝试使用JSBin.complnkr.co 重现您的问题,我们将能够以这种方式进行协作:)