通过AJAX请求重新绘制基于用户input的谷歌图表

我有一个谷歌图表从我的数据库中提取数据,按照我的要求工作。 根据URL中的获取请求,它从选定的表中绘制数据。

我希望通过基于选定表格的下拉菜单中的ajax进行图表更新。 我无法突破的部分是通过ajax获得数据响应。 我认为下面的代码是接近的,但我得到了我似乎无法摆脱的下面的错误。

getdata.php:22 Uncaught ReferenceError:$ is not defineddrawvisualization @ getdata.php:22onchange @ getdata.php:47

我试图从getdata.php中删除GET请求,并认为这是$未定义的硬编码表,但是这并没有解决错误。

工作图代码

<!DOCTYPE> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title> Wind Graph </title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load('visualization', '1', {packages: ['corechart']}); </script> <script type="text/javascript"> function drawVisualization() { var data = new google.visualization.DataTable(); <?php require("dbconnect.php"); echo " data.addColumn('string', 'Time');"; echo " data.addColumn('number', 'Wind_Speed');"; echo " data.addColumn('number', 'Wind_Gust');"; $db = mysql_connect($server, $user_name, $password); mysql_select_db($database); $sqlQuery = "SELECT * FROM ".$_GET['q']." WHERE Date(Time + INTERVAL 10 HOUR) = Date(UTC_TIMESTAMP() + INTERVAL 10 HOUR)"; $sqlResult = mysql_query($sqlQuery); while ($row = mysql_fetch_assoc($sqlResult)) { echo " data.addRow(['{$row['Time']}', {v: {$row['Wind_Speed']}, f: '{$row['Wind_Speed']}' }, {v: {$row['Wind_Gust']}, f: '{$row['Wind_Gust']}' } ]); "; } ?> // Create and draw the visualization. new google.visualization.LineChart(document.getElementById('visualization')). draw(data, {curveType: "none", title: "AU0001 Wind Chart", titleTextStyle: {color: "orange"}, //width: 800, height: 400, //vAxis: {maxValue: 10}, vAxis: {minValue: 0}, vAxis: {title: 'Wind Speed (Knots)'}, vAxis: {baseline: 0}, vAxis: {gridlines: {count: 10} }, vAxis: {title: "Wind Speed (Knots)", titleTextStyle: {color: "orange"}}, hAxis: {title: "Time", titleTextStyle: {color: "orange"}}, interpolateNulls: 1 } ); } google.setOnLoadCallback(drawVisualization); </script> </head> <body> <div id="visualization" style="width: 100%; height: 400px;"></div> </body> </html> 

带有AJAX请求的新代码

 <!DOCTYPE> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title> Wind Graph </title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load('visualization', '1', {packages: ['corechart']}); </script> <script type="text/javascript"> function drawVisualization(num) { var data = new google.visualization.DataTable(TableData); var TableData = $.ajax({ url: "getdata.php", data: "q="+num, dataType:"json", async: false }).responseText; // Create and draw the visualization. new google.visualization.LineChart(document.getElementById('visualization')). draw(data, {curveType: "none", title: "Wind Chart", titleTextStyle: {color: "orange"}, //width: 800, height: 400, //vAxis: {maxValue: 10}, vAxis: {minValue: 0}, vAxis: {title: 'Wind Speed (Knots)'}, vAxis: {baseline: 0}, vAxis: {gridlines: {count: 10} }, vAxis: {title: "Wind Speed (Knots)", titleTextStyle: {color: "orange"}}, hAxis: {title: "Time", titleTextStyle: {color: "orange"}}, interpolateNulls: 1 } ); } // google.setOnLoadCallback(drawVisualization); </script> </head> <body style="font-family: Arial;border: 0 none;"> <form> <select name="users" onchange="drawVisualization(this.value)"> <option value="">Select unit:</option> <option value="0001">0001</option> <option value="0002">0002</option> </select> </form> <div id="visualization" style="width: 100%; height: 400px;"></div> </body> </html> 

getdata.php代码

 <?php require("dbconnect.php"); echo " data.addColumn('string', 'Time');"; echo " data.addColumn('number', 'Wind_Speed');"; echo " data.addColumn('number', 'Wind_Gust');"; $db = mysql_connect($server, $user_name, $password); mysql_select_db($database); $sqlQuery = "SELECT * FROM ".$_GET['q']." WHERE Date(Time + INTERVAL 10 HOUR) = Date(UTC_TIMESTAMP() + INTERVAL 10 HOUR)"; $sqlResult = mysql_query($sqlQuery); while ($row = mysql_fetch_assoc($sqlResult)) { echo " data.addRow(['{$row['Time']}', {v: {$row['Wind_Speed']}, f: '{$row['Wind_Speed']}' }, {v: {$row['Wind_Gust']}, f: '{$row['Wind_Gust']}' } ]); "; } ?> 

build议使用PHP来获取谷歌接受的forms的JSON

以下是使用AJAX从PHP获取json数据并绘制谷歌图表的完整示例

PHP

 <?php require("dbconnect.php"); $db = mysql_connect($server, $user_name, $password); mysql_select_db($database); $sqlQuery = "SELECT * FROM ".$_GET['q']." WHERE Date(Time + INTERVAL 10 HOUR) = Date(UTC_TIMESTAMP() + INTERVAL 10 HOUR)"; $sqlResult = mysql_query($sqlQuery); $rows = array(); $table = array(); $table['cols'] = array( array('label' => 'Time', 'type' => 'string'), array('label' => 'Wind_Speed', 'type' => 'number'), array('label' => 'Wind_Gust', 'type' => 'number') ); while ($row = mysql_fetch_assoc($sqlResult)) { $temp = array(); $temp[] = array('v' => (string) $row['Time']); $temp[] = array('v' => (float) $row['Wind_Speed']); $temp[] = array('v' => (float) $row['Wind_Gust']); $rows[] = array('c' => $temp); } $table['rows'] = $rows; echo json_encode($table); ?> 

不build议使用 – > async: false
或内联事件处理程序 – > <select name="users" onchange="drawVisualization(this.value)">

另外, hAxisvAxis只应在图表选项中出现一次

html / javascript

 <!DOCTYPE> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title> Wind Graph </title> <script src="http://www.google.com/jsapi"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> google.load('visualization', '1', { // google-vis callback callback: function () { // add event listener to select element $("#users").change(drawChart); function drawChart() { $.ajax({ url: 'getdata.php', // use value from select element data: 'q=' + $("#users").val(), dataType: 'json', success: function (responseText) { // use response from php for data table var data = new google.visualization.DataTable(responseText); new google.visualization.LineChart(document.getElementById('visualization')). draw(data, { curveType: 'none', title: 'Wind Chart', titleTextStyle: { color: 'orange' }, interpolateNulls: 1 }); }, error: function(jqXHR, textStatus, errorThrown) { console.log(errorThrown + ': ' + textStatus); } }); } }, packages: ['corechart'] }); </script> </head> <body style="font-family: Arial;border: 0 none;"> <form> <select id="users"> <option value="" selected disabled>Select unit:</option> <option value="0001">0001</option> <option value="0002">0002</option> </select> </form> <div id="visualization" style="width: 100%; height: 400px;"></div> </body> </html>