javascript — передает переменные формы PHP в Google Chart через AJAX.

У меня есть форма PHP выпадающего списка имен таблиц в базе данных, которая публикует выбор, сделанный пользователем. Я хочу использовать это опубликованное имя таблицы для создания диаграммы Google. У меня возникли проблемы с передачей переменной через AJAX в мой PHP-скрипт, который генерирует JSON для диаграммы Google.

Я знаю, что мой JSON отформатирован правильно, мне просто нужно, чтобы имя опубликованной таблицы было передано в PHP-скрипт, который создает объект JSON.

Вот код для JavaScript на странице, которая отображает диаграмму:

<script type="text/javascript">

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

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

function drawChart() {

//this is where I save the posted url parameter, format is tableDDL=tableName
var url = <?php echo json_encode($_POST) ?>;

var jsonData = $.ajax({
url: "getData.php",
type: "POST",
data: ({url: tableDDL}),
dataType:"json",
async: false
}).responseText;

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

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

</script>

А вот мой PHP-скрипт, который генерирует объект JSON:

<?php

include 'dbConnect.php';

$table = $_POST['url'];

$sql = "SELECT row1, row2 from " . $table;

$array = array();

$array['cols'][] = array("id" =>"", "label" => "Row1", "pattern" => "", 'type' => 'string');
$array['cols'][] = array("id" =>"", "label" => "Row2", "pattern" => "", 'type' => 'number');

if ($result = $conn->query($sql)) {
while ($row = $result->fetch_assoc()) {
$array['rows'][] = array('c' => array( array('v' => $row["row1"]), array('v' => $row["row2"])));
}
}

echo json_encode($array);

?>

редактировать: Я обновил свой код до статического значения, которое я пытаюсь передать в мой скрипт PHP. Код все еще не работает.

Моя ошибка: JSQL ajax error: parsererror, SyntaxError: Unexpected token <

Вот обновленный JavaScript, который я пробовал:

<script type="text/javascript">

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

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

function drawChart() {

var jsonData = $.ajax({
url: "getData.php",
type: "POST",
data: '{table: tableDDL}',
dataType:"json",
async: false,
success: function(response, textStatus, jqXHR){
},
error: function(jqXHR, textStatus, errorThrown){
console.log("JSQL ajax error: " + textStatus + ", " + errorThrown);
},
complete: function(){
}

}).responseText;

var jsonChartData = $.parseJSON(jsonData);
console.log("jsonChartData: " + jsonChartData);

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

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

</script>

А вот обновленный PHP, который следует вызывать из функции AJAX и получать переданные данные:

<?php

include 'dbConnect.php';

$table = $_POST['tableDDL'];

$sql = "SELECT row1, row2 from " . $table;

// check connection
if ($conn->connect_errno) {
printf("Connect failed: %s\n", $conn->connect_error);
exit();
}

$array = array();

$array["cols"][] = array("id" =>"", "label" => "Row 1", "pattern" => "", "type" => "string");
$array["cols"][] = array("id" =>"", "label" => "Row 2", "pattern" => "", "type" => "number");

if ($result = $conn->query($sql)) {
while ($row = $result->fetch_assoc()) {
$array["rows"][] = array("c" => array( array("v" => $row["row1"]), array("v" => $row["row2"])));
}
}

echo json_encode($array);

?>

3

Решение

Вы можете взглянуть на мой код, работает без проблем и решить проблему изменения размера:

<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);

function drawChart() {
//All Students
var formDataAll = {type:"All"};
var jsonDataAll = $.ajax({
type: "POST",
data : formDataAll,
url: "./content/statisticsData.php",
dataType:"json",
async: false
}).responseText;

var dataAll = new google.visualization.DataTable(jsonDataAll);

var optionsAll = {
legend: 'none',
chartArea: {'width': '100%', 'height': '100%'},
colors: ['#FF8615', '#68AD12', '#A22979', '#1D63BB', '#D72D16']
};

function resize () {
var chartAll = new google.visualization.PieChart(document.getElementById('Allchart'));
chartAll.draw(dataAll, optionsAll);
}
window.onload = resize();
window.onresize = resize;
}
</script>

Если ваш массив правильный, это должно работать.

Это другая часть (statisticsData.php) (обновлено):

if (isset($_POST["type"])) {
if ($_POST["type"] == "All") {
$levelstatistics = returnstudentsstatistics();
$array = array();
$cols = array();
$rows = array();
$cols[] = array("id"=>"","label"=>"Level","pattern"=>"","type"=>"string");
$cols[] = array("id"=>"","label"=>"Number","pattern"=>"","type"=>"number");
foreach ($levelstatistics as $levelstatisticsData) {
$rows[] = array("c"=>array(array("v"=>$levelstatisticsData[0],"f"=>null),array("v"=>(int)$levelstatisticsData[1],"f"=>null)));
}
$array = array("cols"=>$cols,"rows"=>$rows);
echo json_encode($array);
} else {
echo "Error";
}
}

Это вывод json:

{
"cols":[
{"id":"","label":"Level","pattern":"","type":"string"},
{"id":"","label":"Number","pattern":"","type":"number"}
],
"rows":[
{"c":[{"v":"Lactantes","f":null},{"v":0,"f":null}]},
{"c":[{"v":"Maternal","f":null},{"v":4,"f":null}]},
{"c":[{"v":"Kinder","f":null},{"v":23,"f":null}]},
{"c":[{"v":"Primaria","f":null},{"v":52,"f":null}]},
{"c":[{"v":"Secundaria","f":null},{"v":31,"f":null}]}
]
}

Это функция БД:

/**************************
Return students statistics
**************************/
function returnstudentsstatistics() {
include ("./businesslogic/dbconnection/cfg.php");
try {
$db = new PDO('mysql:host='.$server.';dbname='.$db,$db_user,$db_password);
$string = ""; //Your query Here"$sql = $db->prepare($string);
$sql->execute();
$row = $sql->fetchAll();
$db = null;
return $row;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
}
}
1

Другие решения

Если JSON сформирован правильно, вам нужно передать строку. Так

data: ({url : tableDDL})

становится

data: '{'+url+': tableDDL}'

и тогда ваш вызов ajax выглядит так

var jsonData = $.ajax({
url: "getData.php",
type: "POST",
data: '{'+url+': tableDDL}',
dataType:"json",
async: false,
success: function(response, textStatus, jqXHR){
},
error: function(jqXHR, textStatus, errorThrown){
console.log("JSQL ajax error: " + textStatus + ", " + errorThrown);
},
complete: function(){
}

}).responseText;
1

По вопросам рекламы [email protected]