2012-09-14 17 views
5

Estoy intentando completar una serie de Highchart desde una fuente xml usando jQuery. El archivo XML es una exportación de RRDtool y tiene el siguiente formato:Cargando series de Highcharts desde XML usando 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> 

Mi enfoque era para cargar los datos usando jQuery y empuje la serie al gráfico:

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

termino conseguir el error siguiente:

Unexpected value NaN parsing y attribute

I creó una jsFiddle para demostrar el código: http://jsfiddle.net/GN56f/

+0

+1 para la creación de un violín –

+0

¿Es posible añadir una declaración console.log después de que su matriz se rellena y verificar que todas las variables son numéricas v? – marteljn

+1

@Adrian un violín que no reproduce el problema es inútil – Musa

Respuesta

2

Aparte del problema de dominio cruzado, el error se debe a que hay una serie vacía existente en las opciones de trazado. La serie inicial en las opciones debe establecerse en:

series: [] 

en lugar de:

serie: [{ nombre: 'Temperatura', datos: [] }]

La subsiguiente llame al options.series.push(series); simplemente agrega una nueva serie sin cambiar la que está vacía.

2

Problemas:

  • se le olvidó var antes de declarar options y chart
  • olvidó ; después del final options
  • Hava se ha intentado entrar options antes pase a Highcharts? Está pasando el siguiente series.

¿Cuál es el resultado esperado? Creo que no.

series: [{ 
    name: 'Temperature', 
    data: [] 
}, { 
    data: [// data from xml] 
}] 
  • Estás creando la tabla completa antes de la solicitud, por lo options.series.data.push no va a funcionar, usted tiene que utilizar setData para actualizar dinámicamente, pero hay un problema, no se sabe cuánto tiempo la solicitud usted toma, entonces le sugiero que cree la tabla dentro del success.

Intente lo siguiente.

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); 
} 
Cuestiones relacionadas