2012-09-14 8 views
5

Próbuję wypełnić serię highchart ze źródła xml przy użyciu jQuery. Plik XML jest eksport z rrdtool i ma następujący format:Ładowanie serii High Chart z XML przy użyciu jQuery

<data> 
<row><t>1347559200</t><v>2.1600000000e+01</v></row> 
<row><t>1347562800</t><v>2.1504694630e+01</v></row> 
<row><t>1347566400</t><v>2.1278633024e+01</v></row> 
. 
. 
. 
</data> 

Moje podejście było załadować dane przy użyciu jQuery i popchnąć serię do wykresu:

$.ajax({ 
     type: "GET", 
     url: "data/data.xml", 
     dataType: "xml", 
     success: function(xml) { 
     var series = { data: [] 
        }; 

     $(xml).find("row").each(function() 
     { 
      var t = parseInt($(this).find("t").text())*1000 
      var v = parseFloat($(this).find("v").text()) 
      series.data.push([t,v]); 
     }); 
     options.series.push(series); 
     } 
    }); 

I skończyć uzyskiwanie następujący błąd:

Unexpected value NaN parsing y attribute

stworzyłem JSFiddle do wykazania kod: http://jsfiddle.net/GN56f/

+0

+1 do tworzenia skrzypce –

+0

można dodać console.log oświadczenie po macierzy jest wypełniana i sprawdzić, czy wszystkie znaczniki są numeryczne przeciwko? – marteljn

+1

@Adrian skrzypce, które nie odtwarza problemu jest bezużyteczne – Musa

Odpowiedz

2

Oprócz problemu z wieloma domenami błąd wynika z tego, że w opcjach wykresu istnieje już pusta seria. Początkowy cykl w opcji powinna być ustawiona na wartość:

series: [] 

zamiast:

serii: [{ nazwa: 'Temperatura' danych: [] }]

Kolejne zadzwonić pod numer options.series.push(series); po prostu dodaje nową serię pozostawiając pusty niezmieniony.

2

Problemy:

  • zapomniałeś var przed deklarują options i chart
  • zapomniał ; po zakończeniu options
  • Hava próbowałeś zalogować options przed przejściu do Highcharts? Mijasz następujący kod: series.

To oczekiwany wynik? Myśle że nie.

series: [{ 
    name: 'Temperature', 
    data: [] 
}, { 
    data: [// data from xml] 
}] 
  • Ty tworzysz wykres przed kompletny wniosek, tak options.series.data.push nie będzie działać, trzeba użyć setData zaktualizować dynamicznie, ale jest problem, że nie wiem, jak długo żądanie bierzesz, więc proponuję ci utworzyć wykres wewnątrz success.

Spróbuj wykonać następujące czynności.

success: function(xml) { 
    $('row', xml).each(function() { 
     options.series.data.push([t,v]); 
    }); 
    //@todo: declare chart as global before the ajax function 
    chart = new Highcharts.Chart(options); 
} 
Powiązane problemy