9

Estoy usando HighCharts junto con Python para crear gráficos dinámicamente. Todo funciona bien, sin embargo obtengo la excepción cannot read property "0" of undefined en IE8. Desafortunadamente, mi cliente también quiere que funcione bajo IE8. Así que aquí está el código de la función principal:HighCharts.js no muestra el gráfico en IE8

function generateChart(series) { 
    var chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'company_chart', 
     }, 
     xAxis: { 
      type: "datetime", 
     }, 
     yAxis: [{ 
      title: { 
       text: "T1", 
       }, 
      },{ 
      title: { 
       text: "T2", 
       }, 
      }, 
      opposite: true, 
     }], 
     plotOptions: { 
      series: { shadow: false }, 
      column: { shadow: false, }, 
     }, 
     series: series 
    }); 
); 

Ahora mi petición ajax devuelve algunos datos y almacenarlo en la variable de la siguiente manera:

chart_data = [ 
    { 
     type: "spline", 
     color: '#ff0000', 
     yAxis: 0, 
     data: dataT1, 
    }, 
    { 
     type: "column", 
     color: '#0000ff', 
     yAxis: 1, 
     data: dataT2, 
    } 
]; 

Después de eso que llamo generateChart(chart_data);. El formato de las variables dataT1 y dataT2 está bien, ya que funciona en cualquier otro navegador. Por ejemplo dataT1 puede tener este aspecto:

dataT1 = [ [1325721600000,1.64], 
      [1325635200000,1.64], 
      [1325548800000,1.7], 
      [1325462400000,1.7],]; 

Pero sigue siendo la excepción se produce en virtud de IE8. Alguna idea de cómo solucionar este problema?

+0

Actualmente estoy usando HighStock (pero aquí solo uso HighCharts) y la excepción se arroja en el script highstock.js. Parece que está intentando leer 'chart_data [0] .data [0]' y arroja la excepción. No puedo decirlo con certeza, porque utilicé la versión minificada. Lo extraño es que cuando lo depuro 'chart_data [0] .data' es' null' pero 'chart_data [1] .data' no lo es. Pero todos los elementos están bien (funcionan bajo otros navegadores). – freakish

+0

Ver la actualización de mi respuesta. El problema es con las comas que cuelgan en las definiciones de matriz de datos. – Pointy

Respuesta

17

Esas comas que cuelgan están causando errores en Internet Explorer. Deshazte de ellos.

He aquí un ejemplo:

chart: { 
     renderTo: 'company_chart', // <--- get rid of that comma 
    }, 

Internet Explorer considera una coma al final de un objeto literal como que para ser un error. De hecho, debería estar viendo la advertencia "Errores en la página", pero el error suele ser algo que no indica esta causa raíz real.

editar — bien aparentemente IE8 no es exigente con eso, aunque IE7 sí lo es.

editar nuevamenteSin embargo, IE8 interpreta que la última coma colgando en sus arreglos de datos en el sentido de que debe haber un elemento extra! En otras palabras:

[1, 2, 3,].length 

es 3 en Firefox/Chrome/Safari pero es en Internet Explorer. Cuando intenta acceder a ese elemento, el navegador le da undefined.

+2

Pensé en ello también, pero esto parece estar solucionado en IE8 y posterior, ya que la depuración rápida muestra que este código no arroja ninguna excepción y funciona bien. E incluso si lo hiciera, entonces obtendría una excepción diferente, ¿no? – freakish

+0

Bueno, es ** definitivamente ** incorrecto para IE antes de la versión 8, y sospecho que funciona en IE8. Lo intentaré sin embargo. – Pointy

+0

Bueno, sí, tienes razón, aleluya por eso. IE8 no parece importarle. Sin embargo, si cambio IE8 al modo IE7, entonces se queja. – Pointy

Cuestiones relacionadas