1

我正在使用 Highcharts 做饼图。下面是它的 JS 代码:

$(document).ready(function () {
var chart;

var graphData = $("#graphContentdata").val();
console.log(graphData);
var options = {
        chart: {
            renderTo: 'graphContainer',
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'SOV'
        },
        tooltip: {
            formatter: function() {
                return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
            }
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    formatter: function() {
                        return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Browser share',
           data: []
        }]
    }

    chart = new Highcharts.Chart(options);
    chart.series[0].setData("["+graphData+"]");

 });

以及用于生成数据的 PHP 代码:

foreach ($sumArray as $key=>$value)
    {
        $sumArray[$key] = array_sum($value);
        $percent = (number_format(($sumArray[$key]/$sovGrandTotal)*100,2));

        $data[] =  "['$key', $percent]";            
    }
    $data = join(",", $data);

?>               
  <input type='hidden' id='graphContentdata' value="<?php echo $data; ?>">  

我得到的数据格式是:

['www.quora.com', 0.23],['www.slideshare.net', 0.25],['me', 99.52]

问题是:

chart.series[0].setData("["+graphData+"]");

不创建图形,但如果我将控制台中的值复制粘贴到graphData变量的位置,它的工作方式如下:

chart.series[0].setData([['www.quora.com', 0.23],['www.slideshare.net', 0.25],['me', 99.52]]);

正在工作中。

这里有什么错误???

4

1 回答 1

0

问题是您在使用时将数据作为字符串传递

chart.series[0].setData("["+graphData+"]");

您需要将数据设置为 Array。您可以通过使用以下方式转换您的字符串来做到这一点eval

chart.series[0].setData(eval("["+graphData+"]"));

您也可以使用 jQuery 将您的 String 转换为 JSON,但在这种情况下,您必须使用双引号来打开和关闭字符串:

$.parseJSON("[[\"www.quora.com\", 0.23],[\"www.slideshare.net\", 0.25],[\"me\", 99.52]]");
于 2013-06-05T08:37:57.907 回答