Javascript 使用JSON/JS通过AJAX调用创建Google图表

Javascript 使用JSON/JS通过AJAX调用创建Google图表,javascript,jquery,ajax,json,google-visualization,Javascript,Jquery,Ajax,Json,Google Visualization,CI在创建图表时遇到问题。我已经阅读了很多教程,基本上是根据它们编写代码的。然而,问题是图表根本不会显示。 我希望通过AJAX调用从SQLite3中检索数据,然后基于该数据绘制图表。 可以是柱状图或饼图,没关系。 我很确定我处理JSON的方式存在一些问题,我希望有人能帮助我。谢谢 #test.html -------------------------------------------------------------------------

CI在创建图表时遇到问题。我已经阅读了很多教程,基本上是根据它们编写代码的。然而,问题是图表根本不会显示。 我希望通过AJAX调用从SQLite3中检索数据,然后基于该数据绘制图表。 可以是柱状图或饼图,没关系。 我很确定我处理JSON的方式存在一些问题,我希望有人能帮助我。谢谢

          #test.html
          -------------------------------------------------------------------------
          <html>
          <head>
          <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
          <script type="text/javascript" src="https://www.google.com/jsapi"></script>
          <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
          <script type="text/javascript">   

           function drawChart() {
                var jsonData = $.ajax({
                url: "test-return.php",
                dataType: "json",
                async: false
           }).responseText;


           document.getElementById('rightDiv').innerHTML = jsonData;

           var jsonData2 = [["FC Internazionale ",24],["AS Roma ",24],["Milan AC ",20],["UC Sampdoria ",19],["US Citt\u00e0 di Palermo",18],["SSC Napoli ",15],["Juventus FC ",16],["Parma FC ",14],["Genoa CFC ",14],["AS Bari ",13],["AC Fiorentina ",13],["SS Lazio ",11],["Calcio Catania ",10],["Cagliari Calcio ",11],["Udinese Calcio ",11],["AC Chievo Verona ",12],["Bologna FC ",10],["Atalanta BC ",9],["AC Siena ",7],["AS Livorno Calcio ",7]];

           var data = google.visualization.arrayToDataTable(jsonData2,true);

           var options = {
                title: 'table 1'
           };

           var chart = new google.visualization.ColumnChart(
                    document.getElementById('chart_div'));
           chart.draw(data, options);
          }
          google.load('visualization', '1', {packages:['corechart'], callback: drawChart});

         </script>
       </head>
       <body>
            <div id="chart_div" style="width: 400px; height: 500px;"></div>

            <div id="rightDiv">query results</div>  
       </body>
       </html>


       #test-return.php
       -----------------------------------------------------------------------------
       <?php
              sqlite code here
              ................
              echo json_encode($row_array);
       ?>

       $row_array output => [["FC Internazionale ",24],["AS Roma ",24],["Milan AC ",20],["UC Sampdoria ",19]......
#test.html
-------------------------------------------------------------------------
函数绘图图(){
var jsonData=$.ajax({
url:“test return.php”,
数据类型:“json”,
异步:false
}).responseText;
document.getElementById('rightDiv')。innerHTML=jsonData;
var jsonData2=[“国际米兰俱乐部”,24],“作为罗马俱乐部”,24],“米兰AC俱乐部”,20],“坎普多利亚大学”,19],“美国城市巴勒莫”,18],“南卡那不勒斯俱乐部”,15],“尤文图斯俱乐部”,16],“帕尔玛俱乐部”,14],“热那亚CFC俱乐部”,14],“作为巴里俱乐部”,13],“AC佛罗伦萨俱乐部”,13],“SS拉齐奥俱乐部”,11],“卡塔尼亚俱乐部”,10],“卡利亚里俱乐部”,11],“乌迪内斯俱乐部”,11],“AC切沃维罗纳俱乐部”12],“博洛尼亚足球俱乐部”,10],“亚特兰大BC”,9],“AC锡耶纳”,7],“作为利沃诺足球俱乐部”,7];
var data=google.visualization.arrayToDataTable(jsonData2,true);
变量选项={
标题:“表1”
};
var chart=新的google.visualization.ColumnChart(
document.getElementById('chart_div');
图表绘制(数据、选项);
}
load('visualization','1',{packages:['corechart'],callback:drawChart});
查询结果
#test-return.php
-----------------------------------------------------------------------------
$row_阵列输出=>[[“国际足球俱乐部”,24],“罗马队”,24],“米兰AC队”,20],“坎普多利亚大学”,19]。。。。。。

您必须将数据格式与所选图表类型所需的格式相匹配。按原样,您将有三列数据:一列数字、一列字符串和一列数字。PieChart需要两列数据:第一列应为“字符串”,第二列应为“数字”。ColumnCharts可以有任意数量的列:第一列可以是“number”、“date”、“datetime”、“timeofday”或“string”类型,但以下所有列都应该是“number”类型(通常,也就是说,有些例外情况与使用列角色有关,这些列角色超出了您在此执行的操作范围)

查看您的数据,我推测第一列(示例数据中的1、2、3、4…是一个行号,而不是您想要绘制的内容。如果是这种情况,您需要调整服务器端代码以删除它。如果不是这种情况,您能否提供有关它的信息,以便我可以帮助您了解如何使用它

此外,您的数据缺少列标题。
arrayToDataTable
方法将采用第一行数据并将其用作列标题,因此您将得到三列,标签为“1”、“FC Internazionale”和“24”,这可能是您不想要的。请修改服务器端代码,使第一行数据包含列标签,或将
arrayToDataTable
调用中的第二个参数设置为
true

通过使用
jsonData=$.ajax(…).responseText;
,您正在绕过jQuery进行的JSON转换,并将响应的原始文本传递给
jsonData
。由于您需要一个javascript数组来使用
arrayToDataTable
方法,因此需要调用
JSON.parse
将其转换为数组:

var data = google.visualization.arrayToDataTable(JSON.parse(jsonData), true);

您好!感谢您与我分享这些宝贵的信息。我当然已经对服务器端代码进行了必要的调整,以删除这些不必要的数字(1、2、3…).Ialso按照您的建议添加了布尔true,但由于某些原因它仍然无法工作。有什么想法吗?我非常感谢您的帮助!使用您提供的代码和JSON字符串,我能够绘制图表:。在Chrome中打开页面,并检查开发人员的控制台(在Windows版本中打开ctrl+shift+j)。是否报告了任何错误?如果没有,请导航到浏览器中的
test return.php
,确认它正确输出了数组。这当然有助于理解问题。确实报告了错误,=>“不是数组”.但我仍然有线索为什么?我继续修改代码,看看调用ajax的jsonData变量是否包含任何内容?是的,它包含任何内容,因为我可以将该数组打印到另一个div中…正如您在代码中看到的那样…有任何线索说明问题所在吗?因此,“rightDiv”获取数组,即jsonData实际上包含数组,但r将此变量插入arrayToDataTable(jsonData,true)时的某些原因它不会做任何事情……啊,我现在明白了问题所在。您将AJAX设置为返回JSON的原始文本字符串,需要将其转换为javascript数组,才能使
arrayToDataTable
方法正常工作。使用
JSON.parse
函数运行它。请参见此处的示例:。使用相关代码。