【问题标题】:Datatable does not works with Firebase数据表不适用于 Firebase
【发布时间】:2018-12-05 11:21:37
【问题描述】:

我正在尝试在 Datatable 中的数据中显示数据,并允许用户以所需的格式下载。但这似乎不起作用我的数据既没有显示也没有下载。这是目前正在使用的代码。

document.addEventListener("DOMContentLoaded", function(event) {


    var dTable=$('#ex-table').DataTable({
        "bDestroy": true,
        dom: 'lfrtipB',
        buttons: [ 
                    {
                        extend: 'copyHtml5',
                        title: 'Records'
                    },
                    {
                        extend: 'csvHtml5',
                        title: 'Records'
                    },
                    {
                        extend: 'excelHtml5',
                        title: 'Records'
                    },
                    {
                        extend: 'pdfHtml5',
                        title: 'Records'
                    },
                    'print'
                ],
         lengthMenu: [[5, 20, 50, -1], [5, 20, 50, "All"]]

  });


});



var databaseRef = firebase.database().ref("users/");

var table = $('#ex-table').DataTable();

databaseRef.on("child_added", function(data) { 
   var storageObj = data.val();

   var dataSet = [storageObj.Department, storageObj.EmpId, storageObj.Name, storageObj.Position];

   table.rows.add([dataSet]).draw();

});

这是我正在尝试的代码的代码笔https://codepen.io/jagrutitiwari/pen/WYBWVy。我哪里错了?

更新:

我的users 节点截图:

更新2

安全规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

更新 3

如果我将 dataSrc 添加到 Datatable 中,它可以工作,但我现在在 Datatable 中看不到导出按钮。

document.addEventListener("DOMContentLoaded", function(event) {


    var dTable=$('#ex-table').DataTable({
        "bDestroy": true,
        dom: 'lfrtipB',
        data: dataSrc,
        buttons: [ 
              {
                 extend: 'copyHtml5',
                 title: 'Records'
               },
               {
                 extend: 'csvHtml5',
                 title: 'Records'
               },
               {
                  extend: 'excelHtml5',
                  title: 'Records'
               },
               {
                   extend: 'pdfHtml5',
                   title: 'Records'
               },
                   'print'
               ],
         lengthMenu: [[5, 20, 50, -1], [5, 20, 50, "All"]]

  });


});

【问题讨论】:

  • 试用你的 codepen 我感觉你的数据库是空的(对于 users 节点)
  • 我已经用数据截图更新了我的问题。请再检查一遍好吗?
  • 您能否也分享您的安全规则。因为显然用户需要经过身份验证才能读取数据,请参阅您共享的屏幕顶部的消息。
  • 使用安全规则更新问题

标签: javascript firebase firebase-realtime-database datatables


【解决方案1】:

使用您的安全规则,您的用户需要经过身份验证才能读取(和写入)数据库。

使用您在问题中显示的代码(我猜是整个 HTML 页面的摘录),您似乎没有要求用户进行身份验证,因此您在查询数据库时没有得到任何记录.

您应该集成身份验证机制,例如使用 FirebaseUI Auth(请参阅 https://github.com/firebase/firebaseui-web),或者,如果您的数据库正在测试中,请尝试使用“公共”规则,例如:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

【讨论】:

  • 谢谢雷诺。该代码现在确实有效。但是为什么 Datatable 的搜索栏不起作用呢?我也无法使用数据表下载 Firebase 数据。你知道原因是什么吗?
  • 这可能是因为当您加载 DataTable 时没有数据,因为 on() 侦听器是异步的。换句话说,您使用 JavaScript 模式 (datatables.net/manual/data/#Javascript),但数据集为空。您应该查看 Ajax 源数据 (datatables.net/manual/data/#Ajax) 的可能性,并可能使用 Firebase REST API。但这可能应该在一个全新的 SO 问题中处理。
  • @Jagruti 感谢您接受答案。你也可以点赞!见stackoverflow.com/help/someone-answers。谢谢!
  • 嗨 Renaud,您能看到问题中的第三个更新吗?我想我已经部​​分理解了。数据表现在至少可以识别数据,搜索功能也有效,但导出按钮消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2021-04-04
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多