2016-10-19 2 views
0

Ich arbeite gerade mit Highstock/Highcharts und ich möchte Daten über eine JSON-Datei, die ich habe, laden. Wenn ich versuche, die Daten, die es gibt mir diese Fehlermeldung in der Konsole zu erhalten, die ich vorher nicht gesehen:Ich bekomme eine seltsame Fehlermeldung von Highstock/Highcharts

highstock.js:456 Uncaught TypeError: f.data.slice is not a function 

Und ich versuche, die JSON-Daten durch diese Funktion zu erhalten. Ich bin nur diese Fehlermeldung erhalten, wenn im die URL für meine data.json eingeben:

$.each(names, function (i, name) { 

     var dataUrl = 'http://local.priceservice.dev/js/data.json'; 

     $.getJSON(dataUrl, function (data) { 

      seriesOptions[i] = { 
       name: name, 
       data: data 
      }; 

      // As we're loading the data asynchronously, we don't know what order it will arrive. So 
      // we keep a counter and create the chart when all the data is loaded. 
      seriesCounter += 1; 

      if (seriesCounter === names.length) { 
       createChart(); 
      } 
      console.log(data) 
     }); 
    }); 

Ich habe noch nie diese Botschaft gesehen und ich habe um zu suchen versucht, aber ich kann nicht jemanden finden, der hatte dasselbe Problem wie ich.

Json:

{ 
    "priceSeries": { 
     "2016-10-19T12:51:51.000Z": [[1451606400000, 18.0], [1454284800000, 19.0], [1456790400000, 17.0], [1456790400000, 15.0], [1459468800000, 15.0], [1462060800000, 15.0], [1464739200000, 15.0], [1467331200000, 15.0], [1470009600000, 15.0], [1472688000000, 15.0], [1475280000000, 15.0], [1477958400000, 15.0], [1480550400000, 15.0], [1483228800000, 15.0], [1485907200000, 15.0], [1488326400000, 15.0]], 
     "2016-11-19T12:51:51.000Z": [[1451606400000, 19.0], [1454284800000, 20.0], [1456790400000, 18.0], [1456790400000, 16.0], [1459468800000, 16.0], [1462060800000, 16.0], [1464739200000, 16.0], [1467331200000, 16.0], [1470009600000, 16.0], [1472688000000, 16.0], [1475280000000, 16.0], [1477958400000, 16.0], [1480550400000, 16.0], [1483228800000, 16.0], [1485907200000, 16.0], [1488326400000, 16.0]] 
    } 
} 

Highstock/Highcharts Code:

$(function() { 
    var seriesOptions = [], 
     seriesCounter = 0, 
     names = ['MSFT', 'AAPL', 'GOOG']; 
    /** 
    * Create the chart when all data is loaded 
    * @returns {undefined} 
    */ 
    function createChart() { 

     $('#container').highcharts('StockChart', { 

      chart: { 
       zoomType: 'x' 
      }, 
      legend: { 
       enabled: true 
      }, 

      rangeSelector: { 
       buttons: [{ 
        type: 'hour', 
        count: 1, 
        text: '1h' 
      }, { 
        type: 'day', 
        count: 1, 
        text: '1d' 
      }, { 
        type: 'week', 
        count: 1, 
        text: '1w' 
      }, { 
        type: 'month', 
        count: 1, 
        text: '1m' 
      }, { 
        type: 'year', 
        count: 1, 
        text: '1y' 
      }, { 
        type: 'all', 
        text: 'All' 
      }], 
       inputEnabled: false, // it supports only days 
       selected: 4 // all 
      }, 
      yAxis: { 
       labels: { 
        formatter: function() { 
         return (this.value > 0 ? ' + ' : '') + this.value + '%'; 
        } 
       }, 

       plotLines: [{ 
        value: 0, 
        width: 2, 
        color: 'silver' 
       }] 
      }, 

      plotOptions: { 
       series: { 
        compare: 'percent', 
        showInNavigator: true 
       } 
      }, 

      tooltip: { 
       pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>', 
       valueDecimals: 2, 
       split: true 
      }, 

      series: seriesOptions 
     }); 
    } 

    $.each(names, function (i, name) { 

     var dataUrl = 'http://local.priceservice.dev/js/data.json'; 

     $.getJSON(dataUrl, function (data) { 

      seriesOptions[i] = { 
       name: name, 
       data: data 
      }; 

      // As we're loading the data asynchronously, we don't know what order it will arrive. So 
      // we keep a counter and create the chart when all the data is loaded. 
      seriesCounter += 1; 

      if (seriesCounter === names.length) { 
       createChart(); 
      } 
      console.log(data) 
     }); 
    }); 
}); 

Vielen Dank im Voraus! :)

Antwort

1

Daten in Serie müssen ein Array sein. Die Serie benötigt mindestens ein Objekt mit Daten im Format wie folgt aus:

series: [{ 
    data: [...] // <- has to be an array 
}] 

Ihre Serie wie folgt aussieht:

series: [{ 
    name: ..., 
    data: { // <- you put an object instead of an array with points 
     "priceSeries": ... 
    } 
}] 

Der obige Code verursacht, dass die Scheibe ist Aufruf an das Objekt, wie diese

var someObj = {}; 
someObj.slice(); // Uncaught TypeError: someObj.slice is not a function(…) 

Sie auf diese Weise gehen sollte: http://jsfiddle.net/r3xfxymm/1/

+0

Danke für die Antwort, die geholfen haben! – RasmusGlenvig

Verwandte Themen