2015-08-31 2 views
0

Я работаю над созданием динамических значений для круговой диаграммы, которая представляет собой график из chart.js Я создал переменную, которая содержит несколько значений объектов, которые должны быть передается в массиве для круговой диаграммы. Если я передаю переменную, ничего не появляется, но если я передаю переменные равные статическим значениям, круговая диаграмма начнет работать. Я искал различные методы, но не мог заставить его работать с моим кодом. Мой код выглядит следующим образом:Как создать массив объектов динамически в javascript для круговой диаграммы

/*PIE Chart*/ 
    var elements = []; 
    var counter; 
    jQuery.ajax({ 
    type: 'POST', 
    url: 'ajax-request.php', 
    data: {}, 
    success: function(response){ 
    //here data is means the out put from the php file it is not   
    $('#StudentID').val() 
    var jsonData = JSON.parse(response); 
     console.log(elements); 
     var pieData; 
     for (var i = 0; i < jsonData.length; i++) { 
      counter = jsonData[i]; 
      var sale = roundFloat(counter.sales,2); 
      elements+= '{value:'+sale+',color: "#FDB45C",highlight: "#FFC870",label:"'+counter.sku+'"},'; 

     } 
     var pieData = [elements]; 

    var ctx = document.getElementById("pie-chartjs").getContext("2d"); 
    window.myPie = new Chart(ctx).Pie(pieData); 
    } 
    }); 
+0

У вас есть ошибка при использовании переменной? –

+1

Подсказка: 'elements' - это строка, поэтому pieData - это массив одного элемента. Является строковым значением элементов. Я предполагаю, что функция «Pie» должна принимать массив объектов. – Ankur

+0

Я получаю это значение в консоли для «элементов»: {значение: 9982154.22, цвет: «# FDB45C», выделить: «# FFC870», метка: «GL2010B»}, {значение: 1473462.15, цвет: «# FDB45C», выделите: «# FFC870», метка: «PL009»}, {значение: 1009087.15, цвет: «# FDB45C», выделить: «# FFC870», метка: «PL006»}, которая поступает динамически из запроса ajax. Когда я передаю полный ответ, скопированный с консоли, круговая диаграмма работает. Но это срабатывает, когда я передаю переменные «элементы». –

ответ

1

Вам нужно сделать несколько изменений в код, чтобы сделать эту работу.

pieData должен быть массивом объектов. Поэтому вместо добавления строки вам нужно добавить push объект в массив. После того, как вы сделаете это, что elements представляет собой массив объектов, и вы можете непосредственно присвоить его pieData

Ниже приводится измененный блок кода

for (var i = 0; i < jsonData.length; i++) { 
    counter = jsonData[i]; 
    var sale = roundFloat(counter.sales, 2); 
    elements.push({ 
     value: sale, 
     color: "#FDB45C", 
     highlight: "#FFC870", 
     label: counter.sku 
    }) 
} 
var pieData = elements; 
+0

ЭТО РАБОТАЕТ !!! Какое облегчение !!! Большое вам спасибо :) :) –

+0

спасибо, что это помогло –

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