从 Highstock / Highcharts 获取奇怪的错误信息
Getting weird error message from Highstock / Highcharts
我目前正在使用 Highstock / Highcharts,我不想通过我拥有的 json 文件加载数据。当我尝试获取数据时,它在控制台中显示了我以前从未见过的错误消息:
highstock.js:456 Uncaught TypeError: f.data.slice is not a function
我正在尝试通过此函数获取 json 数据。当我为我的 data.json
:
输入 url 时,我只收到此错误消息
$.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)
});
});
我以前从未见过该消息,我尝试四处搜索,但找不到与我有相同问题的人。
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 代码:
$(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)
});
});
});
提前致谢! :)
系列中的数据必须是数组。该系列至少需要一个对象,其数据格式如下:
series: [{
data: [...] // <- has to be an array
}]
你的系列看起来像这样:
series: [{
name: ...,
data: { // <- you put an object instead of an array with points
"priceSeries": ...
}
}]
上面的代码导致 slice 是对对象的调用,就像这样
var someObj = {};
someObj.slice(); // Uncaught TypeError: someObj.slice is not a function(…)
我目前正在使用 Highstock / Highcharts,我不想通过我拥有的 json 文件加载数据。当我尝试获取数据时,它在控制台中显示了我以前从未见过的错误消息:
highstock.js:456 Uncaught TypeError: f.data.slice is not a function
我正在尝试通过此函数获取 json 数据。当我为我的 data.json
:
$.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)
});
});
我以前从未见过该消息,我尝试四处搜索,但找不到与我有相同问题的人。
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 代码:
$(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)
});
});
});
提前致谢! :)
系列中的数据必须是数组。该系列至少需要一个对象,其数据格式如下:
series: [{
data: [...] // <- has to be an array
}]
你的系列看起来像这样:
series: [{
name: ...,
data: { // <- you put an object instead of an array with points
"priceSeries": ...
}
}]
上面的代码导致 slice 是对对象的调用,就像这样
var someObj = {};
someObj.slice(); // Uncaught TypeError: someObj.slice is not a function(…)