LINUX.ORG.RU

JS,Highcharts, не работает функция setInterval

 ,


0

1

Всем привет. Пытаюсь работать с графиками через Highcharts.

Есть файл php. Который отдает данные в след виде:

[[1594920369000,45]]
Эти данные периодически изменяются.

Далее пытаюсь эти данные добавить на график через след код:

          chart: {
            events: {
              load: function () {
                var series = this.series[0],
                    x, y;
                  setInterval(function () {
                  $.getJSON('getDynamicData.php', function(lst){
                    x = lst[0];
                    y = lst[1];
                  });
                  series.addPoint([x, y], true, true);
                }, 1000);
              }
            }
          },
Этот код должен добавлять данные динамически на график, но ни чего не выходит. Где я ошибся?

$.getJSON асинхронная функция. Следовательно когда ты вызываешь series.addPoint([x, y], true, true); в своем коде, у тебя x, y еще не определены.

Где я ошибся?

В понимании асинхронности вообще.

Должно быть так.

$.getJSON('getDynamicData.php', function(lst){
                    x = lst[0];
                    y = lst[1];

                  series.addPoint([x, y], true, true);
                  });
anonymous
()
Ответ на: комментарий от koteika

Значит ты либо некорректно внес изменения. Либо у тебя в lst не приходят корректные данные

[code=js]chart: { events: { load: function () { var series = this.series[0], x, y; setInterval(function () { $.getJSON(‘getDynamicData.php’, function(lst){ x = lst[0]; y = lst[1];

                   series.addPoint([x, y], true, true);
                 });
            }, 1000);
          }
        }
      },

[/code]

Твой код точно выглядит так?

anonymous
()
Ответ на: комментарий от koteika

Твой код точно выглядит так? Что в lst приходит ты проверил?

chart: { events: { load: function () { var series = this.series[0], x, y; setInterval(function () { $.getJSON(‘getDynamicData.php’, function(lst){ x = lst[0]; y = lst[1];

                   series.addPoint([x, y], true, true);
                 });
            }, 1000);
          }
        }
      },
anonymous
()

Есть файл php. Который отдает данные в след виде:

[[1594920369000,45]]

это у тебя не lst[0] и lst[1]

У тебя приходит массив с массивом. Должно быть как минимум lst[0][0] и lst[0][1]

anonymous
()
Ответ на: комментарий от anonymous

Как проверить lst? Прости за тупой вопрос, но с js я второй день знаком. Через alert?

Поправил код, теперь выглядит так, тоже не работает:

    chart: {
            events: {
              load: function () {
                var series = this.series[0];
                  setInterval(function () {
                  $.getJSON('getDynamicData.php', function(lst){
                    var x = lst[0][0],
                    y = lst[0][1];
                    series.addPoint([x, y], true, true);
                  }); }, 1000);
              }
            }
          },

koteika
() автор топика
Ответ на: комментарий от koteika

Открываешь devtools, вкладку Сеть, и смотришь какие запросы уходят на сервер и что приходит в ответ.

В callback (function(lst){…) можешь debugger; поставить, чтобы произшла остановка и посмотреть, что лежит в переменной. Ну или в начало функции допиши console.log(x, y) да.

anonymous
()
Ответ на: комментарий от koteika

chart: {
    events: {
        load() {
            let series = this.series[0];
            setInterval(n => {
                $.getJSON('getDynamicData.php', lst => {
                	console.log('lst: ', lst)
                    let [x, y] = lst
                    console.log('x, y: ', x, y)
                    series.addPoint([x, y], true, true);
                });
            }, 1000);
        }
    }
},
anonymous
()
Ответ на: комментарий от koteika

Ну так. У тебя проблема на сервере.

anonymous
()
Ответ на: комментарий от koteika

Господи. Ну значит у тебя проблема с формированием запроса. Посмотри соответсвие правильности пути, заголовки, что овобще отсылается на сервер. Все есть в этой вкладке devtools. Если у тебя сервер на один запрос из браузера отвечает оке, а на другой не окей - очевидно же, что запросы разные и ты где-то ошибся.

Я не знаю, как тебя удаленно учить отлаживать сетевые запросы. Это не имеет отношения к языку вовсе. Это базовые знания в целом, для программмирования в любой области.

anonymous
()
Ответ на: комментарий от koteika

В ином случае выкладывай свой код в паблик доступ. Чтобы его можно было дебажить не в слепую и не с твоих слов. В том числе, чтобы былы возможность посать запрос твоему php файлу. То есть сервер тоже должен быть в паблике.

anonymous
()
Ответ на: комментарий от koteika

Спасибо за подсказки и помощь, буду разбираться из-за чего ошибка.

Можно и так.
А можно и код показать.

anonymous
()
Ответ на: комментарий от anonymous

У меня есть локальный сервер, думаю где то я допустил ошибку при настройке его. Так же есть удаленный сервер, попробую загрузить код и проверить на нем завтра. Если не выйдет то напишу здесь. Еще раз спасибо за помощь!

koteika
() автор топика
Ответ на: комментарий от anonymous

Дружище Аноним, Спасибо еще раз за помощь!

В общем проверил весь код и нашел ошибку в файле getDynamicData.php Ну и плюсом научился работать с отладкой в вебе. Ошибка пропала, график ожил!

koteika
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.