2016-11-03 2 views
-2

Sory мой плохой английский.
Я пытаюсь сделать grafic с Morris.js, я использую строку Chart и хочу сделать ее с динамическими данными, но когда я буду преобразовывать свой массив в JsonString, это нарушит мои приложения, я уже пробовал некоторые решения в Интернете как this и других, но не успеха и JSON.parse (json) он сломан

, когда я преобразовать массив в 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'] 
    }); 
[...] 

Спасибо

+3

'JSON.parse (dataJson.toString())' wtf. Зачем. –

+1

Если у вас уже есть объект, вам не нужно его разбирать. Просто используйте 'dataJson' напрямую. – Pointy

+0

'dataJson.toString()' НЕ РАБОТАЕТ! Зачем вам это делать? Вы, очевидно, знаете об объекте 'JSON', вы должны знать' JSON.stringify() ' – vlaz

ответ

1

На странице Morris.js о line charts параметр данных описывается как

Данные, предназначенные для сюжета. Это массив объектов, содержащий атрибуты 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. См. http://www.w3schools.com/js/js_json_intro.asp для праймера JSON.

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 синхронно.

Смежные вопросы