Как сделать одно событие (функцию) синхронизации?

К сожалению, пример на jsfiddle не работает (сложности с хедерами, gnix или ещё с чем то - неважно).

Поэтому пришлось выложить пример на сервер.
https://tinyurl.com/y8qznpda

Изначально у меня было 2 статических графика. Но мне понадобилось сделать их динамическими. И я сделал.
Но помимо кривого кода, у меня получилось 2 функции автообновления. По 1 функции setInterval на график.
Мне нужна одна функция. Одно событие, которое обновит эти 2 графика.
График 1 и 2 идентичны (разница только в названии переменных)
Кода много (пусть будет весь) - но важный код всего 10-15 строк.
Остальное настройки и копия кода выше (график 1, график 2... -копии).
Событие, которое надо редактировать-изменить (Событие автообновления)
Как это сделать?

Код

html
<!-- Контейнеры для графика -->
<div id="GRAPH1_container"></div>
<div id="GRAPH2_container"></div>


javascript
var GRAPH1seriesOptions = [],
GRAPH1seriesCounter = 0,
GRAPH1names = ['CURR1','CURR2'];

function createChartGRAPH1() {
Highcharts.stockChart('GRAPH1_container', {

//НАСТРОЙКИ (это не важно)
title: {text: 'График 1'},
credits: {enabled: false},
rangeSelector: {enabled: false}, //Упрощаем график - отключаем выбор периода вверху слева (день-месяц), справа (по датам)
navigator: {enabled: false}, //Упрощаем график - отключаем навигатор (выбор периода внизу)
navigation: {buttonOptions: {enabled: false}}, //Скрываем выпадающее меню справа с опцией сохранения графика в файл
scrollbar: {enabled: false}, //Скрываем скролбар внизу графика
colors: ['#2b908f','#90ee7e',],

chart: {zoomType: 'x',



//СОБЫТИЕ АВТООБНОВЛЕНИЯ  (вот оно!)
events:
{
load: function () {

var GRAPH1series_0 = this.series[0];
var GRAPH1series_1 = this.series[1];
var GRAPH1series_2 = this.series[2];
var GRAPH1series_3 = this.series[3];

setInterval(function ()
{

$.each(GRAPH1names, function (i, name) {
$.getJSON('actions.php?get_live_data&id_name='+name, function(GRAPH1live_data) {
var live_data=JSON.parse(GRAPH1live_data);

if (i==0) GRAPH1series_0.addPoint([live_data[0],live_data[1]], true, true);
if (i==1) GRAPH1series_1.addPoint([live_data[0],live_data[1]], true, true);
if (i==2) GRAPH1series_2.addPoint([live_data[0],live_data[1]], true, true);
if (i==3) GRAPH1series_3.addPoint([live_data[0],live_data[1]], true, true);

});
});
}, 3000); //Автообновление каждые 3 секунды
}
}
//КОНЕЦ СОБЫТИЯ АВТООБНОВЛЕНИЯ  (конец важного кода)


//Ниже снова всякие настройки...
}, //Зум по оси х
boost: {useGPUTranslations: true}, //Включаем ускорение с помощью boost.js
xAxis: {type: 'datetime'}, //Отображаем дату и время по оси х
yAxis: {},
legend:{layout: 'vertical',align: 'bottom',verticalAlign: 'top',enabled: true},

plotOptions: 
{
series: {
animation: false,
turboThreshold: 1000, //Максимально возможное количество отображаемых точек на графике. 1000 по умолчанию
compare: 'number', //number,percent,string сравнение в процентах или показ значения
showInNavigator: true
}
},

tooltip: {pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',valueDecimals: 4,split: true},
series: GRAPH1seriesOptions
});
}
//КОНЕЦ НАСТРОЕК




//НАЧАЛЬНЫЕ ДАННЫЕ НА ГРАФИКЕ  (это не важно)
$.each(GRAPH1names, function (i, name) {
$.getJSON('actions.php?get_graph_data&graph=GRAPH1&id_name='+name+ '&callback=?', function (data) {
GRAPH1seriesOptions[i] = 
{
name: name,
data: data
};

GRAPH1seriesCounter += 1;
if (GRAPH1seriesCounter === GRAPH1names.length) 
{
createChartGRAPH1();
}
    
});

});
//КОНЕЦ НАЧАЛЬНЫХ ДАННЫХ НА ГРАФИКЕ


//Дальше просто копия с измененными переменными

//ГРАФИК 2 -  КОПИЯ ПО АНАЛОГИИ С ГРАФИКОМ ВЫШЕ


var GRAPH2seriesOptions = [],
GRAPH2seriesCounter = 0,
GRAPH2names = ['CURR3','CURR4'];

function createChartGRAPH2() {
Highcharts.stockChart('GRAPH2_container', {

//НАСТРОЙКИ
title: {text: 'График 2'},
credits: {enabled: false},
rangeSelector: {enabled: false}, //Упрощаем график - отключаем выбор периода вверху слева (день-месяц), справа (по датам)
navigator: {enabled: false}, //Упрощаем график - отключаем навигатор (выбор периода внизу)
navigation: {buttonOptions: {enabled: false}}, //Скрываем выпадающее меню справа с опцией сохранения графика в файл
scrollbar: {enabled: false}, //Скрываем скролбар внизу графика
colors: ['#C86938','#C828B0',],

chart: {zoomType: 'x',





//СОБЫТИЕ АВТООБНОВЛЕНИЯ
events:
{
load: function () {

var GRAPH1series_0 = this.series[0];
var GRAPH1series_1 = this.series[1];
var GRAPH1series_2 = this.series[2];
var GRAPH1series_3 = this.series[3];

setInterval(function ()
{

$.each(GRAPH1names, function (i, name) {
$.getJSON('actions.php?get_live_data&id_name='+name, function(GRAPH1live_data) {
var live_data=JSON.parse(GRAPH1live_data);

if (i==0) GRAPH1series_0.addPoint([live_data[0],live_data[1]], true, true);
if (i==1) GRAPH1series_1.addPoint([live_data[0],live_data[1]], true, true);
if (i==2) GRAPH1series_2.addPoint([live_data[0],live_data[1]], true, true);
if (i==3) GRAPH1series_3.addPoint([live_data[0],live_data[1]], true, true);

});
});
}, 3000); //Автообновление каждые 3 секунды
}
}
//КОНЕЦ СОБЫТИЯ АВТООБНОВЛЕНИЯ


}, //Зум по оси х
boost: {useGPUTranslations: true}, //Включаем ускорение с помощью boost.js
xAxis: {type: 'datetime'}, //Отображаем дату и время по оси х
yAxis: {},
legend:{layout: 'vertical',align: 'bottom',verticalAlign: 'top',enabled: true},


plotOptions: 
{
series: {
animation: false,
turboThreshold: 1000, //Максимально возможное количество отображаемых точек на графике. 1000 по умолчанию
compare: 'number', //number,percent,string сравнение в процентах или показ значения
showInNavigator: true
}
},

tooltip: {pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',valueDecimals: 4,split: true},
series: GRAPH2seriesOptions
});
}
//КОНЕЦ НАСТРОЕК



//НАЧАЛЬНЫЕ ДАННЫЕ НА ГРАФИКЕ
$.each(GRAPH2names, function (i, name) {
$.getJSON('actions.php?get_graph_data&graph=GRAPH2&id_name='+name+ '&callback=?', function (data) {
GRAPH2seriesOptions[i] = 
{
name: name,
data: data
};

GRAPH2seriesCounter += 1;
if (GRAPH2seriesCounter === GRAPH2names.length) 
{
createChartGRAPH2();
}
    
});

});
//КОНЕЦ НАЧАЛЬНЫХ ДАННЫХ НА ГРАФИКЕ
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Вы же сами дважды прописали setInterval.

Уберите один из них.
И вообще, очень много повторяющегося кода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы