9

Tôi đang sử dụng HighCharts cùng với Python để tạo biểu đồ động. Tất cả hoạt động tốt, tuy nhiên tôi nhận được cannot read property "0" of undefined ngoại lệ theo IE8. Unfortunetly khách hàng của tôi muốn nó làm việc theo IE8 là tốt. Vì vậy, heres mã của hàm chính:HighCharts.js không hiển thị biểu đồ trong 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 
    }); 
); 

Bây giờ yêu cầu ajax của tôi trả về một số dữ liệu và tôi lưu trữ nó trong biến như thế này:

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

Sau đó tôi gọi generateChart(chart_data);. Định dạng của các biến số dataT1dataT2 là tốt, vì nó hoạt động trong mọi trình duyệt khác. Ví dụ: dataT1 có thể trông giống như sau:

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

Nhưng vẫn ngoại lệ được ném theo IE8. Bất kỳ ý tưởng làm thế nào để sửa lỗi này?

+0

Thực ra tôi đang sử dụng HighStock (nhưng ở đây tôi chỉ sử dụng HighCharts) và ngoại lệ được ném trong kịch bản highstock.js. Có vẻ như nó đang cố gắng đọc 'chart_data [0] .data [0]' và nó ném ngoại lệ. Tôi không thể nói chắc chắn, bởi vì tôi đã sử dụng phiên bản rút gọn. Điều kỳ lạ là khi tôi gỡ lỗi nó 'chart_data [0] .data' là' null' nhưng 'chart_data [1] .data' thì không. Nhưng tất cả các asigments đều tốt (chúng hoạt động dưới các trình duyệt khác). – freakish

+0

Xem cập nhật câu trả lời của tôi. Vấn đề là với các dấu phẩy lơ lửng trong các định nghĩa mảng dữ liệu của bạn. – Pointy

Trả lời

17

Các dấu phẩy lơ lửng đó gây ra lỗi trong Internet Explorer. Loại bỏ chúng.

Dưới đây là một ví dụ:

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

Internet Explorer xem xét một dấu phẩy ở cuối của một đối tượng theo nghĩa đen như vậy là một lỗi. Bạn thực sự nên nhìn thấy cảnh báo "Lỗi trên trang", nhưng lỗi thường là thứ không thể hiện nguyên nhân gốc thực sự này.

chỉnh sửa — cũng rõ ràng IE8 không cầu kỳ về điều đó, mặc dù IE7 là.

chỉnh sửa lạiTuy nhiên, IE8 giải thích rằng dấu phẩy lủng lẳng cuối cùng trong mảng dữ liệu của bạn như có nghĩa là cần phải có một yếu tố thêm! Nói cách khác:

[1, 2, 3,].length 

là 3 trong Firefox/Chrome/Safari nhưng nó trong Internet Explorer. Khi bạn cố truy cập phần tử đó, trình duyệt sẽ cung cấp cho bạn undefined.

+2

Tôi nghĩ về nó quá, nhưng điều này dường như được cố định theo IE8 và sau đó, kể từ khi gỡ lỗi nhanh chóng cho thấy rằng mã này ném không có ngoại lệ và hoạt động tốt. Và ngay cả khi nó đã làm, sau đó tôi sẽ nhận được ngoại lệ khác nhau, phải không? – freakish

+0

Vâng, nó ** chắc chắn ** sai đối với IE trước phiên bản 8 và tôi nghi ngờ về nó hoạt động trong IE8. Tôi sẽ thử nó tuy nhiên. – Pointy

+0

Vâng vâng bạn đúng, hallelujah cho điều đó. IE8 dường như không quan tâm. Tuy nhiên, nếu tôi lật IE8 vào chế độ IE7, thì nó sẽ phàn nàn. – Pointy

Các vấn đề liên quan