Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Загрузка массива данных в Google Charts из файла (https://javascript.ru/forum/misc/68497-zagruzka-massiva-dannykh-v-google-charts-iz-fajjla.html)

Nikk 20.04.2017 11:29

Загрузка массива данных в Google Charts из файла
 
Пытаюсь вывести график из массива чисел, используя библиотеку Google Charts.
Если вводить массив внутри HTML файла, то все работает:

Код:

var data = google.visualization.arrayToDataTable([
['Значение X','Значение Y1','Значение Y2'],
['Значение X1',  53689,            47895],
['Значение X2',  35687,            42558]

Но если вынести массив во внешний файл data.txt, то график не рисуется. В чем может быть проблема?

<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
    $.ajax({
        url: 'data.txt',
        type: 'json',
        success: function (json) {
            var data = google.visualization.arrayToDataTable(json);
                 
  }
    });
}
        var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

        chart.draw(data);
      }
    </script>

</head>
<body>

    <div id="curve_chart"></div>

</body>

Dilettante_Pro 20.04.2017 11:57

Nikk,
Уберите type: 'json',

Nikk 20.04.2017 12:10

Dilettante_Pro,
Убрал, не помогло... При открытии страницы - белый пустой экран.

рони 20.04.2017 12:18

:write: мысли вслух строки 21 23 возможно нужно перенести в строку 17

Dilettante_Pro 20.04.2017 12:21

Nikk,
А у ваc правильный файл data.txt?
поставьте для проверки alert(json)
перед var data = google.visualization.arrayToDataTable(json);

Должна быть одна сплошная строка

Nikk 20.04.2017 12:41

Dilettante_Pro,
Сделал
function drawChart() {
    $.ajax({
        url: 'data.txt',
        success: function (json) {
alert(json);
            var data = google.visualization.arrayToDataTable(json);


Алерт не выходит вообще. И не выходит даже в том случае, если сделать просто текстовый alert('текст'). В чем моя ошибка?

Nikk 20.04.2017 12:45

Цитата:

Сообщение от рони (Сообщение 450393)
:write: мысли вслух строки 21 23 возможно нужно перенести в строку 17

Попробовал, не помогло. Строки таким образом расположены в примерах от Google и прекрасно работают, если не пробовать подключить внешний массив...

Dilettante_Pro 20.04.2017 12:50

Nikk,
Скорее всего дело в асинхронности ajax - функция drawChart завершает работу, не дожидаясь success.

Попробуйте добавить в ajax
async: false,

Nikk 20.04.2017 13:04

Dilettante_Pro,
Добавил, без результата...
$.ajax({
async: false,
        url: 'data.txt',

Dilettante_Pro 20.04.2017 14:38

Nikk,
1. Проверьте свой файл, просто исполнив вот такой скрипт
$.ajax({
            url: 'data.txt',
            success: function (json) {
                alert(json);
            }
        });

Или добавьте кроме success: еще и error:

2. В работающем варианте у вас так?
<script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
       var data = google.visualization.arrayToDataTable([
['Значение X','Значение Y1','Значение Y2'],
['Значение X1',  53689,             47895],
['Значение X2',  35687,             42558]
]);
}
        var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

        chart.draw(data);
      }
    </script>

Вообще-то объявление var data должно быть вне функции. Иначе - область видимости

Nikk 24.04.2017 07:08

В работающем вариант именно так, это кусок кода из справки google.

Нашел полностью работоспособный вариант построения графика по данным из внешнего массива, возможно кому-то пригодится:
http://bl.ocks.org/espinielli/8d106a5cf9aa99734d43


Часовой пояс GMT +3, время: 14:37.