2013-08-11 3 views
0

Я пытаюсь получить ряд и данных через AJAX функции для извлечения данных, в document.ready:Highcharts корыто Аякса не чертежные

function requestData() { 
      $.ajax({ 
       type: 'POST', 
       dataType: 'json', 
       url: xxxxx, 
       async: false, 
       // you can use an object here 
       success: function(data) { 
        $("html").css('cursor','auto'); 
        //remove previous data 
        while(chart.series.length > 0) 
         chart.series[0].remove(true); 
        $.each(data, function(val, text) { 
         counter = 0; 
         $.each(text, function() { 
          if (counter==0) { 
           datoscol= "[" + this + "]"; 
          } 
          else{ 
           datoscol= datoscol + "," + "[" + this + "]"; 
          } 
          counter=1 
         }); 

         datoscol = "["+datoscol + "]"; 
         alert (datoscol); 
         chart.addSeries({ 
          name: val, 
          data: datoscol 
         }); 

        }); 
        chart.redraw(); 
       }, 
       cache: false 
      }); 
     }  

Я также инициализировать Highcharts в document.ready:

chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container2', 
      type: 'line', 
      pointInterval: 30*24 * 3600 * 1000, 
      events: { 
       load: function(){ 
        chart = this; 
        requestData(); 
       } 
      } 

     }, 

     title: { 
      text: 'Facturación clínica' 
     }, 
     credits: { 
      enabled: false 
     }, 
     xAxis: { 
      type: 'datetime', 
      maxZoom: 14 * 24 * 3600000, // fourteen days 
      title: { 
       text: null 
      } 
     }, 
     yAxis: { 
      title: { 
       text: 'Facturación (€)' 
      } 

     }, 
     tooltip: { 
      formatter: function() { 
       var s; 
       if (this.point.name) { // the pie chart 
        s = ''+ 
         this.point.name +': '+ this.y +' fruits'; 
       } else { 
        s = ''+ 
         this.y + " Euros"; 
       } 
       return s; 
      } 
     }, 
     labels: { 
      items: [{ 
        html: 'Facturación clínica', 
        style: { 
         left: '40px', 
         top: '8px', 
         color: 'black' 
        } 
       }] 
     } 
    }); 

Данные, которые я получаю с сервера: {"Employee1": [["1356908400000", "10.00"], ["1359586800000", "11.00"], ["1362006000000", "12.00"], [" 1364684400000" , "13,45"]], "Employee2": [[ "1356908400000", "10,00"], [ "1359586800000", "11,00"], [ "1362006000000", "12. 00 "], [" 1364684400000" , "13,45"]]}

Так что, когда я добавить Серию к Highcharts, значения, например: chart.addSeries ({ Имя: Валя, ---- -----> Employee1 данные: datoscol -------> [["1356908400000", "10.00"], ["1359586800000", "11.00"], ["1362006000000", "12.00"], ["1364684400000", "13.45"]]

У меня нет ошибок через консоль firebug, но ничего не появляется, кроме оси и легенд. Я получаю все названия серий, но ничего не имею о данных, никаких меток, никаких строк.

ответ

0

Данные, которые вы пытаетесь предоставить Highcharts (переменная datoscol), являются строкой. В вашем случае вы должны поставить объект и, содержимое каждого массива также должно быть числом.

Лучший способ, я считаю, - исправить ответ вашего сервера.

Если вы не можете, легкий, грязный и потенциально опасный способ сделать это состоит в eval переменной datoscol как вы поставить его Highcharts:

chart.addSeries({ 
    name: val, 
    data: eval(datoscol) 
}); 

Смотреть это работает here.

Другим способом является преобразование каждого элемента массива в целое число (datetime) и в float (количество). Таким образом, вместо вашего текущего $.each, вы могли бы написать это:

for (var seriesName in data) { 
    var curData = data[seriesName]; 
    var curDataLen = curData.length; 
    for (var i = 0; i < curDataLen; i++) { 
     curData[i][0] = parseInt(curData[i][0], 10); 
     curData[i][1] = parseFloat(curData[i][1]); 
    } 
    chart.addSeries({ name: seriesName, data: curData }); 
} 

Смотреть это работает here.

+0

Работает как очарование :-) – user2670996

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