У меня есть график Хайстока, чтобы показать данные о температуре из нескольких JSON источников. Страница построена с использованием демонстрационного файла сравнения нескольких серий.
Я сейчас пытаюсь динамически добавлять данные в серию, используя событие, но кажется, что он никогда не вызывается или не выполняет то, что я ожидаю / надеюсь, что это делаю: (
Мой код выглядит так:
var seriesOptions = [],
seriesCounter = 0,
names = ['Temperature', 'Humidity'];
var chart; // global
function requestData() {
$.getJSON('JSON/new_Temperature.json',
function(point){
var series = this.series[0];
// add the point
series.addPoint(point);
// call it again after one second
setInterval(requestData, 3000);
});
}
/**
* Create the chart when all data is loaded
* @returns {undefined}
*/
function createChart() {
Highcharts.stockChart('container', {
events: {
load: requestData
},
rangeSelector: {
selected: 1,
buttons: [{
type: 'hour',
count: 1,
text: '1h'
}, {
type: 'minute',
count: 5,
text: '5minutes'
}]
},
series: seriesOptions
});
}
function success(data) {
var name = this.url.match(/(Temperature|Humidity)/)[0];
var i = names.indexOf(name);
seriesOptions[i] = {
name: name,
data: data,
type: 'spline'
};
seriesCounter += 1;
if (seriesCounter === names.length) {
createChart();
}
}
Highcharts.getJSON(
'JSON/Temperature.json',
success
);
Highcharts.getJSON(
'JSON/Humidity.json',
success
);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://code.highcharts.com/stock/modules/exporting.js"></script>
<script src="https://code.highcharts.com/stock/modules/export-data.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-more.js"></script>
<script src="https://code.highcharts.com/js/themes/gray.js"></script>
<div id="container" style="height: 800px; min-width: 310px"></div>
Когда я добавил приведенный выше фрагмент, он выдал ошибку в строке 14, которая является var series = this.series[0];
, так что я думаю, что я что-то там не так делаю? Но я не знаю, что ...
Используемые JSON файлы содержат такие данные:
[[1578508367000,33.8],[1578508491000,33.8],[1578508506000,33.8],[1578508523000,33.8],[1578508539000,33.8],[1578508554000,33.8],[1578508570000,33.8],[1578508586000,33.8],[1578508602000,33.8],[1578508619000,33.8],[1578508635000,33.8],[1578508652000,33.8],[1578508668000,33.9],[1578508683000,33.8],[1578508699000,33.8],[1578508715000,33.8],[1578508731000,33.8],[1578508746000,33.8],[1578508762000,33.8],[1578508778000,33.8],[1578508795000,33.8],[1578508811000,33.8],[1578508827000,33.8],[1578508843000,33.8],[1578508860000,33.8],[1578508876000,33.8],[1578508892000,33.8],[1578508908000,33.8],[1578508923000,33.8],[1578508939000,33.8],[1578508955000,33.8]]
, а JSON, который я использую для вставки точки, содержит только новейшее значение: [[1578508367000,33.8]]
Я думаю, мне нужно вызвать get JSON внутри requestData () несколько раз !? По одному на каждую серию.
В настоящее время я использую setInterval , но есть ли способ сделать это всякий раз, когда JSON обновляется / перезаписывается?
Заранее спасибо за помощь Я.
РЕДАКТИРОВАТЬ : В ответ Себастьяну Вендзелю мои намерения могут быть не совсем ясны:)
Я пытался сделать следующее. У меня есть 4 json файлов, 2 из них содержат значения температуры / влажности за прошедшие дни, а 2 из них содержат только самые последние измерения. У меня PHP скрипт, обновляющий все 4 периодически. Когда моя страница загружается, она загружает 2 больших json файла в виде отдельных рядов в диаграмму. После загрузки графика я хочу, чтобы он периодически добавлял новые измерения в график без необходимости перезагружать всю страницу. Это на самом деле похоже на этот пример: Живые данные из динамического c CSV , но я использую JSON (хотя CSV был бы возможен), и мне нужно несколько серий. Оба из которых я не получил работать с этим примером CSV.