谷歌图表没有数据(空白页)



我有一个包含8个Google图表的网页

当我有了图表的所有数据,它就可以正常工作了

但有时有些图表没有数据(8个中有2或3个)

所以我得到一个空白页因为这个图表

如何跳过空白数据图表的脚本

这是其中一个的脚本(所有类似的脚本)

<script type="text/javascript">
  google.charts.setOnLoadCallback(drawCostCharts);
  function drawCostCharts() {
    var data = google.visualization.arrayToDataTable([
             ['WEEK', 'total Cost' ,{ role: 'annotation' } , 'Budget objectif' ],
                <?    foreach($***THEBlankDATAHERE***->getRows() as $row) {     
                        $DBcostmonth = DB::table('budget_objectif')
                                                    ->select('value')
                                                    ->where('cam_id', 2)
                                                    ->where('year', $row[1])
                                                    ->where('month', $row[0])
                                                    ->get();  
                        $test = $DBcostmonth[0]->value; ?>
            ["<? echo $row[0]; ?>",  <? echo $row[2]; ?>, <? echo floor($row[2]); ?>, <? echo $test; ?>], 
                <? }?>
          ]);
    var options = {
                            // title: 'Google Analytics Revenue',
                            vAxis: {minValue:0},
                            curveType: "function",width: 720, height: 400,
                            chartArea:{left:60,top:40,width:"90%",height:"70%"},
                            legend: {position: 'none'},
                            seriesType: 'bars',
                            series: {0:{color: 'purple'}},
                            isStacked:'true',
                            series: {1: {type: 'line', color:'red' , curveType: 'straight' }}

            };
    var chart = new google.visualization.ComboChart(document.getElementById('div1_3'));
        chart.draw(data, options);
    }

编辑:这个数据源来自laravel 4.1的父视图,它是一个google分析数据

所以有些用户可以访问图表的所有数据,有些用户不能访问某些图表中的数据

Edited2:

我改变了代码中的脚本,我得到了页面,但没有任何图表,新代码是:

<?php if ($tristanweekdata) { ?>
 <script type="text/javascript">
  google.charts.load('current', {'packages':['corechart']});
  google.charts.setOnLoadCallback(drawCostCharts);
  function drawCostCharts() {
    var data = google.visualization.arrayToDataTable([
             ['WEEK', 'total Cost' ,{ role: 'annotation' } , 'Budget objectif'],
                <?    foreach($tristanweekdata->getRows() as $row) {
                $DBcostweek = DB::table('budget_objectif')
                                                    ->select('value')
                                                    ->where('cam_id', 2)
                                                    ->where('year', $row[1])
                                                    ->where('month', wtm($row[0]))
                                                    ->get();  
                    $test = $DBcostweek[0]->value/4.33; 

                ?>
            ["<? echo $row[0]; ?>",  <? echo $row[2]; ?>, <? echo floor($row[2]); ?> ,<? echo $test;?> ], 
                <? }?>
          ]);
    var options = {
                            // title: 'Google Analytics Revenue',
                            vAxis: {minValue:0},
                            curveType: "function",width: 720, height: 400,
                            chartArea:{left:60,top:40,width:"90%",height:"70%"},
                            legend: {position: 'none'},
                            seriesType: 'bars',
                            series: {0:{color: 'purple'}},
                            isStacked:'true',
                            series: {1: {type: 'line', color:'red' , curveType: 'straight' }}
            };
    var chart = new google.visualization.ComboChart(document.getElementById('tristancostweek'));
        chart.draw(data, options);
    }

 <?php } ?>

现在我在浏览器的控制台中得到了不同的错误:

"未捕获的TypeError: Cannot read property 'arrayToDataTable' of undefined"

谢谢

我找到了让它工作的正确方法:)

这个问题的答案在问题的edited2但是有一个1的变化

你需要做的是把Google图表加载到脚本之外,让它像这样单独出现:

 <script type="text/javascript">
  google.charts.load('current', {'packages':['corechart']});
  </script>

那么你就可以把你想要的条件像这样放在我的语句中:

<?php if ($tristanweekdata) { ?>
     <script type="text/javascript">
      google.charts.setOnLoadCallback(drawCostCharts);
      function drawCostCharts() {
        var data = google.visualization.arrayToDataTable([
                 ['WEEK', 'total Cost' ,{ role: 'annotation' } , 'Budget objectif'],
                    <?    foreach($tristanweekdata->getRows() as $row) {
                    $DBcostweek = DB::table('budget_objectif')
                                                        ->select('value')
                                                        ->where('cam_id', 2)
                                                        ->where('year', $row[1])
                                                        ->where('month', wtm($row[0]))
                                                        ->get();  
                        $test = $DBcostweek[0]->value/4.33; 

                    ?>
                ["<? echo $row[0]; ?>",  <? echo $row[2]; ?>, <? echo floor($row[2]); ?> ,<? echo $test;?> ], 
                    <? }?>
              ]);
        var options = {
                                // title: 'Google Analytics Revenue',
                                vAxis: {minValue:0},
                                curveType: "function",width: 720, height: 400,
                                chartArea:{left:60,top:40,width:"90%",height:"70%"},
                                legend: {position: 'none'},
                                seriesType: 'bars',
                                series: {0:{color: 'purple'}},
                                isStacked:'true',
                                series: {1: {type: 'line', color:'red' , curveType: 'straight' }}
                };
        var chart = new google.visualization.ComboChart(document.getElementById('tristancostweek'));
            chart.draw(data, options);
        }
</script>    
     <?php } ?>

如果用户有正确的访问权限,那么所有的图表都可以工作;)

感谢@WhiteHat的帮助

最新更新