Sory我的英语不好 我正在尝试使用Morris.js制作一个grafic,我正在使用折线图并想用动态数据制作它,但是当我将我的数组转换为JsonString时,它已经破坏了我的应用,我已经尝试了一些解决方法在互联网上,如this和 其他人,但没有成功
当我将数组转换为Json时,控制台显示:
VM13133:1 Uncaught SyntaxError: Unexpected end of JSONinput(…)
executeMorrisGrafics @
dashboard_1Mensal.controller.js:44initController @
dashboard_1Mensal.controller.js:26(anonymous function) @
dashboard_1Mensal.controller.js:16
我的代码就是这个
[...]
function executeMorrisGrafics(startDate, endDate){
RequestService.getReturnMalingResult(startDate, endDate).then(function(data){
var array = [];
for(var i=0;i<data.listLineChartEmailSms.length;i++){
array.push({
y: data.listLineChartEmailSms[i.toString()].y,
a: data.listLineChartEmailSms[i.toString()].a,
b: data.listLineChartEmailSms[i.toString()].b
});
}
dataJson = array; //dataJson is a global Var
});
console.log(dataJson);//working until here
var result = JSON.parse(dataJson.toString());//here is the problem
Morris.Line({
element: 'grafic-LineChart1',
data: result,
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
[...]
谢谢
答案 0 :(得分:1)
在关于line charts的Morris.js页面中,数据参数被描述为
要绘制的数据。这是一个对象数组,包含x和y属性,如xkey和ykeys选项所述。
因此,在您的代码中,您不需要使用dataJson.toString()函数。您的代码应如下所示。
[...]
function executeMorrisGrafics(startDate, endDate){
RequestService.getReturnMalingResult(startDate, endDate).then(function(data){
var array = [];
for(var i=0;i<data.listLineChartEmailSms.length;i++){
array.push({
y: data.listLineChartEmailSms[i.toString()].y,
a: data.listLineChartEmailSms[i.toString()].a,
b: data.listLineChartEmailSms[i.toString()].b
});
}
dataJson = array; //dataJson is a global Var
});
console.log(dataJson);//working until here
//var result = JSON.parse(dataJson.toString());//here is the problem
Morris.Line({
element: 'grafic-LineChart1',
data: dataJson,
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
[...]
更长的解释是,JSON是用于JavaScript的对象的字符串格式。但是你的代码没有做任何需要JSON的事情。有关JSON入门,请参阅http://www.w3schools.com/js/js_json_intro.asp。
答案 1 :(得分:0)
简单来说,JSON是对象的文本表示;对象是数据结构。
没有必要JSON.parse()
已经成为程序中对象的东西。
[…]
var result = dataJson;
Morris.Line({
element: 'grafic-LineChart1',
data: result,
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
另外,就像@adeneo提到的那样,dataJson
似乎是异步设置的Promise回调,但使用dataJson
的代码是同步的。