我知道这个问题已被多次回答,但由于我对对象,数组,字符串和JSON的混淆,我仍然遇到麻烦。
尝试使用Highcharts实现图表我创建了一个从数据库中提取数据的PHP。简化,让我们说这些只是一些价值对(即白天,访问)
我想构建一个数组Array来发送给JS。
我这样做了:
while ($row = mysql_fetch_array($result)) {
$dat = substr($row['data'],8,2); //strip to day
$pag = $row['pagina'];
$data[] = "[".$dat.",".$pag."]";
}
$finalData = join($data, ',');
//echo json_encode($finalData); // I get [09,20],[12,15],[12,11],[12,18]
echo "[".$finalData."]"; //I get [[09,20],[12,15],[12,11],[12,18]]
如您所见,我尝试了两种不同的方法(以及一些带/不带json_encode的变体)。
在客户端,我声明:var donwloaded = [[]];
(数组数组)以这种方式填充:
....
var response = xmlhttp.responseText;
// donwloaded = JSON.parse(response);
donwloaded = response;
我再次尝试了两种方式 通过所有可能的组合,最后“don倒”'结果作为字符串(根据Mozilla调试器)并且图表未填充。
有趣的部分是,如果在JS中我宣布:
var testValues = [ [1,10],[2,20],[3,30],[4,40] ];
看起来与我从PHP得到的类似,Mozilla说这是一个包含4个数组的数组,而Highchart正确显示它。
我确定我没有犯错,但经过2天的测试后,我更加困惑。
答案 0 :(得分:0)
我做到了! 请不要问我,因为我可能比开始时更加困惑 我希望发布此消息,以便与其他像我一样的初学者分享解决方案。
第一步是遵循 Ruslan Osmanov 的建议:
Replace $data[] = "[".$dat.",".$pag."]"; with $data[] = [$dat, $pag];
非常简单而且非常有效
经过几次尝试(即尝试构建一个多维数组),最后我只是放了一个echo json_encode($data);
,大部分问题都消失了。
在客户端,通过一个简单的donwloaded = JSON.parse(response);
,我终于收到了甚至Mozilla认为的阵列阵列和Highcharts。
无论如何仍然存在一个问题:数组中的值已经被字符串化'内部双引号,可能是由于编码,而Highcarts没有将值显示出来 我用PHP {$ 1}}改变了PHP数据 将值转换为数字,现在我终于可以将图表可视化了......很棒 再说一次,我几乎可以肯定有更有效和更优雅的方法,但它确实能满足我的需求并且我很开心。 `