2012-09-18 44 views
3

我花了數小時試圖弄清楚如何將JSON字符串處理成一個javascript數組,然後試圖用highcharts繪製一個餅圖。 這是我Highcharts返回錯誤14

gateway_useage: function(usage_data) { 
     var options = { 
      chart: { 
       renderTo:'gateway-usage', 
       plotBackgroundColor: null, 
       plotBorderWidth: null, 
       plotShadow: false 
      }, 
      title: { text: 'Gateway Usage' }, 
      tooltip: { 
       pointFormat: '{series.name}: <b>{point.percentage}%</b>', 
       percentageDecimals: 1 
      }, 
      plotOptions: { 
       pie: { 
        allowPointSelect: true, 
        cursor: 'pointer', 
        dataLabels: { 
         enabled: true, 
         color: '#000000', 
         connectorColor: '#000000', 
         formatter: function() { 
          return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %'; 
         } 
        }, 
        showInLegend: true 
       } 
      }, 
      series: [{ 
       type: 'pie', 
       name: 'Usage', 
      }] 
     } 

     var serie1 = usage_data.map(function(e) { 
      return [e.gateway, e.val]; 
     }); 
     options.series.push({data: serie1}); 

     var chart = new Highcharts.Chart(options); 

    } 

加載頁面,並檢查錯誤控制檯說「未捕獲Highcharts錯誤#14:www.highcharts.com/errors/14」之後。有什麼做錯了,請幫我出

+3

你檢查了它給你的URL嗎?您的系列數據很可能不是正確的數據類型(應該是數字)。 –

+0

是的,我檢出了url,但是這段代碼應該解析json var serie1 = usage_data.map(function(e){ return [egateway,e.val]; }); options.series.push({data:serie1});所以高層可以理解它 – MrFoh

+1

是的,我看到它返回了正確的數據結構,正如高圖所期望的那樣,但數據本身,也就是e.val,可能不是一個數字(它可能是一個字符串),我猜測。我會設置一個斷點並檢查該值,或者只需在地圖函數中執行parseFloat(e.val)並查看會發生什麼。 –

回答

13

Highcharts Error #14清楚地說,如果你在一個字符串傳遞的數據點

字符串值發送到series.data,預計數 他發生

數據點是y值,如果你的serie.data的形式爲

[y1,y2,y2] 

[[x1,y1],[x2,y2],[x3,y3]] 

[ 
{ x : x1 ,y : y1 }, 
{ x : x2 ,y : y2 }, 
{ x : x3 ,y : y3 } 
] 

在任一數據的類型存儲在y1上述形式,y2 & y3應爲數值。你可以做到這一點我簡單地使用JavaScript中

var serie1 = usage_data.map(function(e) { 
      return [e.gateway, parseFloat(e.val)]; 
}); 

parseFloat()parseInt()或做在您使用
在服務器技術(PHP 4> = 4.2.0,PHP 5)floatval()可以使用

$float_value_of_var = floatval("123.456"); 
+0

這個答案剛剛爲我節省了2個小時的調試時間。 – FreshPro