2016-12-16 80 views
0

我知道这个问题已经回答了很多次,但由于对对象,数组,字符串和JSON的混淆,我仍然遇到了麻烦。
试图通过使用Highcharts实现图表我做了一个PHP从数据库中提取数据。简化,让我们说,这些只是一些值对(即一天,访问)。
我想建立一个数组发送给JS。 我这样做是:Javascript/PHP恢复阵列阵列

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; 

我再次以两种方式尝试。
以所有可能的组合,在'donwloaded'结果作为字符串结束(根据Mozilla调试器),并且图表未填充。

耐人寻味的是,如果JS我声明这一点:

var testValues = [ [1,10],[2,20],[3,30],[4,40] ]; 

出现类似于我从PHP获取,Mozilla的说,这4个数组的数组,并Highchart正确显示。

我确信我没有犯过错误,但经过2天的测试后,我更加困惑。

+3

构建一个正常的PHP数组(多维),然后在结果中应用'json_encode'。将'$ data [] =“[”。$ dat。“,”。$ pag。“]”;'用'$ data [] = [$ dat,$ pag];'替换为开头。 –

+1

请勿使用mysql_ *函数。请看看:http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php更多信息 –

+0

你在找什么? – rahul

回答

0

我做到了! 请不要问我,因为我可能比我开始时更困惑。
我希望发布此消息来分享像我这样的其他初学者的解决方案。

第一步是遵循鲁斯兰奥斯曼诺夫建议:

Replace $data[] = "[".$dat.",".$pag."]"; with $data[] = [$dat, $pag]; 

很简单,很有效。
经过几次尝试(即尝试构建一个多维数组),最后我只是放了一个echo json_encode($data);,大部分问题都没有了。
在客户端,通过简单的donwloaded = JSON.parse(response);,我终于收到甚至Mozilla认可的阵列数组,以及Highcharts。

无论如何仍然存在一个问题:数组中的值在双引号内被“串化”,可能是由于编码造成的,Highcarts并没有将值显示出来。
我更改了PHP的$数据$data[] = [(int)$dat,(int)$pag];
将值转换为数字,现在我终于可以看到图表...很好。
再次,我几乎可以肯定有更高效和优雅的方法,但它做我所需要的,我很高兴。 `