2012-09-14 15 views
5

Sto tentando di compilare una serie di diagrammi di alto livello da un sorgente xml utilizzando jQuery. Il file XML è un'esportazione da RRDTool ed ha il seguente formato:Caricamento serie Highcharts da XML utilizzando 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> 

Il mio approccio è stato quello di caricare i dati utilizzando jQuery e spingere la serie al grafico:

$.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); 
     } 
    }); 

finisco per ottenere la seguente errore:

Unexpected value NaN parsing y attribute

ho creato un JSFiddle per dimostrare il codice: http://jsfiddle.net/GN56f/

+0

+1 per la creazione di un violino –

+0

Potrebbe aggiungere una dichiarazione di console.log dopo l'array è popolato e verificare che tutti i tag v sono numerici? – marteljn

+1

@Adrian un violino che non riproduce il problema è inutile – Musa

risposta

2

A parte il problema tra domini, l'errore è dovuto al fatto che esiste una serie vuota esistente nelle opzioni di stampa. La prima serie di opzioni deve essere impostato su:

series: [] 

invece di:

serie: [{ nome: 'temperatura', dati: [] }]

La successiva chiama allo options.series.push(series); semplicemente aggiunge una nuova serie lasciando quella vuota invariata.

2

Problemi:

  • hai dimenticato var prima di dichiarare options e chart
  • dimenticato ; dopo la fine options
  • Hava si è tentato di accedere options prima di passare a Highcharts? Stai passando il seguente series.

Questo è il risultato previsto? Penso che nessuno.

series: [{ 
    name: 'Temperature', 
    data: [] 
}, { 
    data: [// data from xml] 
}] 
  • Stai creando il grafico prima completa la richiesta, in modo da options.series.data.push non funziona, è necessario utilizzare setData per aggiornare in modo dinamico, ma c'è un problema, non si sa per quanto tempo la richiesta prendi, quindi ti suggerisco di creare il grafico all'interno dello success.

Provare quanto segue.

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); 
} 
Problemi correlati