在Ajax上加载Google Chart - 成功

时间:2016-03-24 11:29:54

标签: javascript jquery ajax

我从ajax填充Google Chart,但只有当ajax的负载足够快时,它才有效。

同样,我需要将我的数据保存为变量,以便稍后在重新调整大小函数和其他数据管理时使用。

我目前正在使用Google图表的教程。

我刚刚添加了一些consoles.log来查看它失败的地方。

    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.charts.load('current', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    //google.charts.setOnLoadCallback(drawChart);
    //Mod

     function drawChart(dataIN) {
      console.log(dataIN);
      if(dataIN == undefined){
        console.log("opt 1")
        console.log(dataIN);
          var jsonData = $.ajax({
            url: "getData.php",
            dataType: "text",
            async: false
              }).responseText;
      }else{
        console.log("opt 2");
        console.log(dataIN);
      }

      // Create our data table out of JSON data loaded from server.
      console.log("data in process")
      var data = new google.visualization.DataTable(dataIN);

      // Instantiate and draw our chart, passing in some options.
      console.log("drawCart")
      var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data, {width: 400, height: 240});
    }

var GAdata = $.ajax({
        url: "getData.php",
        data: "test",
        async: false,
        success: function(resultData){
            google.setOnLoadCallback(drawChart(resultData));
            return resultData;
        }
    }).responseText;
    </script>

最后一个控制台日志是&#34;正在处理的数据&#34;。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的setOnLoadCallback倒退了。 setOnLoadCallback表示图表组件已准备就绪,因此您可以通过两种方式解决它:

  1. google.setOnLoadCallback(function() {
    
          $.ajax({
            url: "getData.php",
            data: "test",
            success: function(resultData) {
              drawChart(resultData);
              return resultData;
            }
          });
        };

  2. 或者

    1. 两者都运行异步,如果setOnLoadCallback在Ajax结果之前返回,你什么都不做,你从ajax成功调用drawChart,如果ajax调用在setOnLoadCallback之前返回,那么你将结果存储在变量中然后从setOnLoadCallback调用drawChart传递缓存结果