【问题标题】:Displaying a Google Chart only when data is present仅在数据存在时显示 Google 图表
【发布时间】:2012-11-26 16:31:49
【问题描述】:

我有一个使用 SQL 数据的 Google 折线图。但是,当查询返回 0 行时,它会在页面上显示一个大的空图表。我想改为显示一些文本,说明没有数据。我尝试将图表函数包装在另一个函数中,如果数据存在则调用该函数,但即使数据存在,也没有显示任何内容。这是我的一些代码:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
function displayChart()
{
    $(document).ready(function()
    {
        google.setOnLoadCallback(drawChart);
    });
}
function drawChart() 
{
// Here we tell it to make an ajax call to pull the data from the .json file
    var jsonData = $.ajax({
    url: "Data.json",
    dataType:"json",
    async: false
}).responseText;

// Create our data table out of JSON data loaded from server.
var data = new google.visualization.DataTable(jsonData);

// Options for the graph, we set chartArea to get rid of extra whitespace
var options = {
                'width':1300,
                'height':500,
                'chartArea': {top:'10%', left:'5%', height:'75%', width:'85%'}
              };

// Instantiate and draw our chart, passing in some options and putting it in the chart_div.
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data,options); 
}
</script>
<?

...

if($got_data == true)
{
    displayChart();
}
else
    echo "There is no data";

知道我做错了什么,或者有更好的方法来完成这个吗?提前致谢!

【问题讨论】:

  • $got_data 的值是如何以及在哪里设置的?
  • 使用$.ajax的回调代替同步调用
  • @Vishal Kumar $got_data 如果返回 1 行或更多行,则在 sql 查询后设置为 true。我已经检查过,这工作正常

标签: javascript function charts call


【解决方案1】:

正如 Serg 的评论所说,您需要设置是否在 ajax 调用的回调中显示图表。这是因为当您调用 $.ajax() 时,将从您的 ajax 调用返回的数据不存在也无法访问。如果您看不起JQuery AJAX page,您会看到几个如何处理来自 ajax 调用的数据的示例,但您正在寻找的内容类似于以下内容:

$.ajax({
    url: "Data.json",
    dataType:"json",
    async: false
}).complete(function(data) {
    if (data) {
        // draw chart
    } else {
        // say no data
    }
);

【讨论】:

  • 但是ajax调用在drawChart函数里面。我必须从 drawChart 函数中调用 drawChart 函数吗?我知道递归函数,但我不确定这是否可行
  • 它应该类似于getChartData,其中包含ajax调用,然后ajax完成函数将调用drawChart函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2020-11-04
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多