我正在继续上一个问题,即onclick -> mysql query -> javascript; 同一页
这是我用于下拉名称的 onchange 函数。它在每个下拉列表更改时调用。这个想法是将每个跑步者的名字发送到 php 页面以运行 mysql 查询,然后返回 3 个要输入到 javascript 的数组。
function sendCharts() {
var awayTeam = document.getElementById('awayRunner').value;
var homeTeam = document.getElementById('homeRunner').value;
if(window.XMLHttpRequest) {
xmlhttp14 = new XMLHttpRequest();
}
else {
xmlhttp14 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp14.onreadystatechange = function() {
if(xmlhttp14.readyState == 4 && xmlhttp14.status == 200) {
var parts = xmlhttp14.responseText.split(','); //THIS IS WHAT IS RETURNED FROM THE MYSQL QUERY. WHEN I ALERT IT, IT OUTPUTS IN THE FORM 14,15,18,16,17,12,13
... code that generates the chart
series: [ {
name: document.getElementById('awayRunner').value,
data: [parts,','], //THIS IS WHERE AN ARRAY MUST BE ENTERED. THIS OUPUTS ONLY ONE NUMBER
type: 'column',
pointStart: 0
//pointInterval
},
{
name: document.getElementById('homeRunner').value,
data: parts, // TRIED THIS
type: 'column',
pointStart: 0
//pointInterval
},
{
name: 'League Avg',
data: [], //THIS IS WHERE 3rd ARRAY MUST BE ENTERED
type:'spline',
pointStart: 0
//pointInterval
},
]
});
}
}
xmlhttp14.open("GET", "getCharts.php?awayRunner="+awayRunner+"&homeRunner="+homeRunner, true);
xmlhttp14.send();
}
我的 php 代码看起来像这样。如您所见,必须返回 3 个数组才能输入到 javascript 中的不同位置以生成代码。
$away=$_GET['awayRunner'];
$home=$_GET['homeRunner'];
$db=mydb;
$homeRunner=array();
$awayRunner = array();
$totalOverall= array();
$getHome="select column from $db where tmName = '$home'";
$result2 = mysql_query($getHome);
while($row = mysql_fetch_array($result2)){
$homeRunner[]= $row['column'];
}
$getAway="select column from $db where tmName ='$away'";
$result22 = mysql_query($getAway);
while($row2 = mysql_fetch_array($result22)){
$awayRunner[]= $row2['column'];
}
$week = 0;
while($week<20){
$week++;
$teamCount = "select count(column) from $db where week = $week";
$resultTeam = mysql_query($teamCount);
$rowTeam = mysql_fetch_array($resultTeam);
$t = $rowTeam['count(column)'];
$getLeague = "select sum(column) from $db where week = $week";
$resultLeague = mysql_query($getLeague);
while($row3 = mysql_fetch_array($resultLeague)){
$totalOverall[]=$row3['sum(column)']/$t;
}
}
echo join(',',$awayRunner);
目前,通过这种方式,图表仅输出数组中的第二个值。例如,如果 var 部分等于 23,25,26,24,23...仅显示 25。
上一个问题得到以下答案 -
- 加载页面。
- 用户选择一个选项。
- onChange 侦听器触发 AJAX 请求
- 服务器接收并处理请求
- 服务器为相关选择发回一个 JSON 数组选项
- 客户端 AJAX 发送方得到响应
- 客户端更新选择以获取 JSON 数组中的值。
我在#'s 5 - 7 上迷路了。有人可以提供完成此操作的代码示例吗?通常,我只会询问方向,但我已经被这个问题困扰了好几天。我准备放弃在我的网站上放置图表的想法。提前致谢
EDIT
这是我为发送和接收一个请求所做的第一个更改
<script>
$(function(){
$("#awayRunner").change(function(){
$.ajax({
type: "POST",
data: "data=" + $("#awayRunner").val(),
dataType: "json",
url: "/my.php",
success: function(response){
alert(response);
}
});
});
});
提示框中显示的数据格式为 12、15、16、15。现在,当我输入 data: response 时,图表中只显示了每个数字中的第二个数字。有任何想法吗?
EDIT
好的,所以我发现响应的信息是一个字符串。必须使用 parseInt 将其转换为 INT 才能在图表中使用。目前,我有
$("#awayTeam").change(function(){
$.ajax({
type: "POST",
data: "away=" + $("#awayTeam").val(),
dataType: "json",
url: "/getCharts.php",
success: function(response){
var asdf = [];
asdf[0] = parseInt(response[0]);
asdf[1] = parseInt(response[1]);
asdf[2] = parseInt(response[2]);
asdf[3] = parseInt(response[3]);
alert(asdf);
将不得不编写一个函数来使这个更干净。