9

Я использую HighCharts вместе с Python для динамического создания диаграмм. Все работает нормально, однако я получаю исключение cannot read property "0" of undefined в IE8. К сожалению, мой клиент хочет, чтобы он работал и в IE8. Так Heres код главной функции:HighCharts.js не отображает диаграмму в 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 
    }); 
); 

Теперь мой запрос Ajax возвращает некоторые данные и хранить его в переменной, как это:

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

После этого я вызываю generateChart(chart_data);. Формат переменных dataT1 и dataT2 в порядке, так как он работает под любым другим браузером. Например dataT1 может выглядеть следующим образом:

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

Но все-таки исключение под IE8. Любые идеи, как это исправить?

+0

На самом деле я использую HighStock (но здесь я использую только HighCharts), и исключение вызывается в скрипте highstock.js. Похоже, что он пытается прочитать «chart_data [0] .data [0]» и выдает исключение. Я не могу сказать точно, потому что я использовал сокращенную версию. Странно то, что когда я отлаживаю его, 'chart_data [0] .data' является' null', но 'chart_data [1] .data' не является. Но все asigments прекрасны (они работают под другими браузерами). – freakish

+0

См. Мое обновление ответа. Проблема заключается в зависании запятых в ваших определениях массива данных. – Pointy

ответ

17

Эти висячие запятые вызывают ошибки в Internet Explorer. Избавься от них.

Вот пример:

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

Internet Explorer считает запятую в конце литерала объекта так, чтобы быть ошибка. Фактически вы должны видеть предупреждение «Ошибки на странице», но ошибка обычно является чем-то, что не указывает на настоящую причину.

Редактировать — хорошо, по-видимому, IE8 не придирчив к этому, хотя IE7 есть.

редактировать сноваОднако, IE8 интерпретирует, что последняя оборванную запятая в массивах данных, а это означает, что должно быть дополнительным элементом! Другими словами:

[1, 2, 3,].length 

в Firefox/Chrome/Safari 3, но это в Internet Explorer. Когда вы пытаетесь получить доступ к этому элементу, браузер дает вам undefined.

+2

Я тоже об этом думал, но это похоже на исправление в IE8 и более поздних версиях, поскольку быстрый отладка показывает, что этот код не генерирует исключения и отлично работает. И даже если бы это произошло, тогда у меня было бы другое исключение, не так ли? – freakish

+0

Ну, это определенно ** неправильно для IE до версии 8, и я подозрительно отношусь к нему, работая в IE8. Однако я попробую. – Pointy

+0

Ну да, ты прав, аллилуйя для этого. IE8, похоже, не возражает. Однако, если я перехожу IE8 в режим IE7, то он жалуется. – Pointy

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