我正在尝试使用jQuery(或highcharts)将数据添加到下面的函数中。问题是如何在不使用eval的情况下将数据嵌入到javascript代码中,因为我必须将所有代码都写成字符串?
function pie(data)
{
$(function () {
$('#renderingdiv').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'Browser market shares at a specific website, 2010'
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
color: '#000000',
connectorColor: '#000000',
format: '<b>{point.name}</b>: {point.percentage:.1f} %'
}
}
},
series: [**data**]
});
});
};
数据看起来像:
{\
type: 'pie',\
name: 'Statuses',\
data: [\
[WSCH, 377]\
,\
[WMATL, 4]\
,\
[WAPPR, 349]\
,\
[NCOMP, 3]\
,\
[INPRG, 56]\
,\
[COMP, 18]\
,\
[CLOSE, 697]\
,\
[APPR, 420]\
\
]\
}
请问好吗?
答案 0 :(得分:1)
这个快速而脏的函数将您的数据转换为有效的JSON并返回一个对象。
function parseData(data) {
data = data
// remove \+line endings
.replace(/\[\n\r]+/g, '')
// insert double quotes for keys
.replace(/([\[{,])\s*(\w+)([,:])/g, '$1"$2"$3')
// replace values single quotes with double
.replace(/(:)\s*'(\w+)\s*'/g, '$1"$2"');
return JSON.parse(data);
}
当然你应该改进这个来处理角落案件。
DEMO: http://jsfiddle.net/qq98D/2/(导致控制台输出)
但这只是一种解决方法。真正的解决方案是更改服务器输出以返回有效的JSON。
结果(JSON编码):
{ “类型”: “饼”, “名称”: “状态” 的, “数据”:[[ “WSCH”,377],[ “WMATL”,4],[ “WAPPR”,349],[ “NCOMP”,3],[ “INPRG”,56],[ “COMP”,18],[ “CLOSE”,697],[ “APPR”,420]]}