【问题标题】:Google Pie-charts谷歌饼图
【发布时间】:2018-07-16 09:42:12
【问题描述】:

添加 3D 饼图(谷歌图表)的 JavaScript 代码。饼图不显示在视图中。如何解决?

Javascript:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

    <script type="text/javascript">
        $(function() {
            <?php
                $bookingData = array();
                $i=0;
                foreach($bookingCounts as $booking){
                $bookingData[$i]['label'] = $booking['Name'];
                $bookingData[$i]['data'] = $booking['total'];
                $i++;
                }
            ?>
            var data = <?php echo json_encode($bookingData, JSON_NUMERIC_CHECK);?>;
            console.log(data);

    var options = {
          title: 'Booking',
          is3D: true,
        };

        var chart = new google.visualization.PieChart(document.getElementById('flot-pie-chart'));
        chart.draw(data, options);


});

我的观点是:

<div class="flot-chart">
    <div class="flot-chart-content" id="flot-pie-chart">
    </div>
 </div>

【问题讨论】:

  • console.log(data); 打印什么?你能给我们展示一个示例 HTML 输出到 php 代码吗?
  • 另外,您是否有一个未在此处显示的链接到 jQuery 的脚本标签?因为$(function() {}) 是 jQuery。
  • @Saclt7 你的问题解决了吗?

标签: javascript php pie-chart pygooglechart


【解决方案1】:

我注意到您似乎没有添加列标题。只需在您的脚本标签中执行此操作即可:

 var data = new google.visualization.DataTable();
     data.addColumn('Type', 'ColName');
     data.addRows([ <?php PHP ?> ]); 

在我在下面发布的代码中,您需要做一些事情。

首先,您需要列标题。其次,您需要执行 JSON_ENCODE 和您的查询。第三,更改视图,我的 google 图表只选择第 1、2 和 3 行,而省略了第 0 行。显然也更改了图表类型。最后在选项中添加is3D: true

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
function drawChart(test_input) {
    var data = new google.visualization.DataTable();
        data.addColumn('string', 'Name');
        data.addColumn('string', 'Date');
        data.addColumn('number', 'Test_Val_A');
        data.addColumn('number', 'Test_Val_B');
        data.addRows([
            <?php
                $dbName = "test_db";
                $config = parse_ini_file("myconfigfile.ini",true);
                $dbUser = $config["mydb"]["db_user"];
                $dbServer = $config["mydb"]["db_ip"];
                $dbPassword = $config["mydb"]["db_pass"];

                $con = mysql_connect($dbServer, $dbUser, $dbPassword);

                if (!$con) {
                    die('Could not connect: ' . mysql_error());
                }

                mysql_select_db($dbName, $con);
                    $sql = mysql_query("SELECT * FROM MyTable where Name like '$test_input'");
                $output = array();

                while($row = mysql_fetch_array($sql)) {
                    // create a temp array to hold the data
                    $temp = array();

                    // add the data
                    $temp[] = '"' . $row['Name'] . '"';
                    $temp[] = '"' . $row['Date'] . '"';
                    $temp[] = (int) $row['Test_Val_A'];
                    $temp[] = (int) $row['Test_Val_B'];
                    // implode the temp array into a comma-separated list and add to the output array
                    $output[] = '[' . implode(', ', $temp) . ']';
                }
                // implode the output into a comma-newline separated list and echo
                echo implode(",\n", $output);

                mysql_close($con);
            ?>
        ]);
        var view = new google.visualization.DataView(data);
        view.setRows(data.getFilteredRows([
            {column: 0, value: test_input}
        ]));
        view.setColumns([1,2,3]);

        var options = {
            tooltip: {
                trigger: 'both',
            },
            vAxis: { 'title': 'Volume' },
            hAxis: { slantedText: true},
            crosshair: { trigger: 'both'},
            width: 1900,
            height: 400
        };

        var chart = new google.visualization.LineChart(document.getElementById('Whatever_my_id_is'));
        chart.draw(view, options);
    }
</script>

【讨论】:

    【解决方案2】:

    您正在使用 jQuery 而不支持它(使用 $() 函数);一个快速的解决方法是在你的主脚本之前添加这个元素:

     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    

    More on importing jQuery.

    但是,如果这就是您要使用的全部 jQuery,我建议将 $(function() { /* your code here */ } 替换为原生 JavaScript 替代方案,例如:

    document.addEventListener("DOMContentLoaded", function(event) { 
      /* your code here */
    });
    

    More on this.

    【讨论】:

    • @Saclt7 你能从浏览器中获取 HTML 源代码吗?在大多数浏览器中,您只需在 URL 前写上view-source:。它显示你的 PHP 输出是什么,帮助你调试。
    • 我不懂你的意思
    • @Saclt7 如果您知道您的代码不起作用,则必须在浏览器中检查它。如果那个浏览器。例如,如果该浏览器是 Chrome 或 Firefox,只需转到 URL view-source:{your URL here}(例如:view-source:https://www.google.com 将显示https://www.google.com 的源代码)。这是您的 PHP 代码正在生成并发送给客户端的 HTML:您可以将其直接与您之前链接的 Google 饼图源代码示例进行比较。
    【解决方案3】:

    Javascript:

    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
    google.charts.load("current", {packages:["corechart"]});
    google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
        <?php
            $bookingData = array();
            $i=1;
            $bookingData[0][0] = 'Task';
            $bookingData[0][1] = 'Hours per Day';
            foreach($bookingCounts as $booking){
            $bookingData[$i][0] = $booking['Name'];
            $bookingData[$i][1] = $booking['total'];
            $i++;
            }
        ?>
    
        var data = <?php echo json_encode($bookingData, JSON_NUMERIC_CHECK);?>;
        console.log(data);
        var data2 = google.visualization.arrayToDataTable(data);
    
        var options = {
          title: '',
          is3D: true,
        };
    
        var chart = new google.visualization.PieChart(document.getElementById('flot-pie-chart'));
        chart.draw(data2, options);
    
    
    };
    

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多