javascript - 无法从 firebase 数据库绘制谷歌图表

标签 javascript json parsing firebase gchart

我想在 Google 图表的基本折线图中可视化 Firebase 中存储的一些简单传感器读数。

数据结构如下:

KgPdzr3PgDaKVa73asd: {
    date: "29/03/201
    time: "15:21:07"
    value: 21.461541056632996
}

不幸的是,折线图无法加载,我不明白为什么。 json对象加载成功,所以我认为这与它的绘图部分有关。任何正确方向的帮助将不胜感激。

<script src="https://www.gstatic.com/firebasejs/3.7.4/firebase.js"></script>
    <script src=" http://www.google.com/uds/modules/gviz/gviz-api.js"></script>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

        // Initialize Firebase
        var config = {
            apiKey: "AIzaSyBGiHpuzcgw_Ettlko_oU66U-gbW_SbEUA",
            authDomain: "internet-of-things-62d39.firebaseapp.com",
            databaseURL: "https://internet-of-things-62d39.firebaseio.com",
            projectId: "internet-of-things-62d39",
            storageBucket: "internet-of-things-62d39.appspot.com",
            messagingSenderId: "143567304866"
        };
        firebase.initializeApp(config);

        var database = firebase.database();


        firebase.database().ref('/Oslo/temperature').once('value').then(function(snapshot) {
            temps = snapshot.val();
            console.log(temps);

            google.charts.load('current', {'packages':['corechart','line']});
            google.charts.setOnLoadCallback(drawChart(temps));
        });

        function parse (temp){
            return(new Date(temp.replace(/-/g, '/'))).getTime()
        }

        //    google.charts.load('current', {'packages':['corechart', 'line']});
        //    google.charts.setOnLoadCallback(drawChart);

        function drawChart(temps) {
            var array = $.map(temps, function(value, index) {
                return [value];
            });

            var data = new google.visualization.DataTable();
            data.addColumn('number', 'date');
            data.addColumn('number', 'time');
            data.addColumn('number', 'value');

            var sort = function(a,b){return parse (a.time) - parse(b.time)};
            var tempData = array.sort(sort);
            var output=[];

            for (var i = 0; i<tempData.length;i++){
                var item = tempData[i];
                output.push([
                  //  parseFloat(parse(item.time)),
                    parseFloat(item.time),
                    parseFloat(item.date),
                    parseFloat(item.value)
                ]);
            }

            console.log(output);
            data.addRows(output);


            var options = {
                chart: {
                    title: 'title',
                    subtitle: 'subtitle'
                },
                width: 900,
                height: 500
            };

            var chart = new google.visualization.LineChart(document.getElementById('chart_div'));

            chart.draw(data, options);
        }



    </script>
<div id="chart_div"></div>

最佳答案

添加(粗体):'https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'

还进行了一些细微的更改。干杯。通过更改加载的 jquery 版本消除了一些错误。

      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
      <script src="https://www.gstatic.com/firebasejs/3.7.4/firebase.js"></script>
      <script src=" http://www.google.com/uds/modules/gviz/gviz-api.js"></script>
      <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

      <script src="https://www.google.com/jsapi"></script>
      <script type="text/javascript">
          // Initialize Firebase
          var config = {
              apiKey: "AIzaSyBGiHpuzcgw_Ettlko_oU66U-gbW_SbEUA",
              authDomain: "internet-of-things-62d39.firebaseapp.com",
              databaseURL: "https://internet-of-things-62d39.firebaseio.com",
              projectId: "internet-of-things-62d39",
              storageBucket: "internet-of-things-62d39.appspot.com",
              messagingSenderId: "143567304866"
          };
          firebase.initializeApp(config);

          var database = firebase.database();


          firebase.database().ref('/Oslo/temperature').once('value').then(function(snapshot) {
              temps = snapshot.val();
              console.log(temps);

              google.charts.load('current', {
                  'packages': ['corechart', 'line']
              });
              google.charts.setOnLoadCallback(drawChart(temps));
          });

          function parse(temp) {
              return (new Date(temp.replace(/-/g, '/'))).getTime()
          }



          function drawChart(temps) {
              var array = $.map(temps, function(value, index) {
                  return [value];
              });

              var data = new google.visualization.DataTable();
              data.addColumn('number', 'date');
              data.addColumn('number', 'time');
              data.addColumn('number', 'value');

              var sort = function(a, b) {
                  return parse(a.time) - parse(b.time)
              };
              var tempData = array.sort(sort);
              var output = [];

              for (var i = 0; i < tempData.length; i++) {
                  var item = tempData[i];
                  output.push([
                      //  parseFloat(parse(item.time)),
                      parseFloat(item.time),
                      parseFloat(item.date),
                      parseFloat(item.value)
                  ]);
              }
              console.log(output);
              data.addRows(output);


              var options = {
                  chart: {
                      title: 'title',
                      subtitle: 'subtitle'
                  },
                  width: 900,
                  height: 500
              };

              var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
              console.log("data + options: " + data, options)
              chart.draw(data, options);
          }



          google.charts.load('current', {
              'packages': ['corechart', 'line']
          });
          google.charts.setOnLoadCallback(drawChart);
      </script>

关于javascript - 无法从 firebase 数据库绘制谷歌图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181421/

相关文章:

javascript - 如何使用按钮刷新 div

javascript - 正则表达式和javascript

javascript - mouseMove 不适用于 Selenium 和 Protractor

java - 从 XML 构建树结构缓慢

xml - 是否有用于 Delphi 和 Free Pascal 的 SAX 解析器?

javascript - 无法使用 jQuery 均衡 anchor 高度

javascript - Ajax - 返回的 json 对象在 ie 中为空

json - 调用初始化程序 SwiftUI 时没有完全匹配

php - Symfony2 MySql : Fetch array and get JSON array without column names

java - JSON 对象提取值