обновить данные диаграммы, вызванные через ajax через PHP, MySQL

Данные My Chart вызываются через ajax из базы данных MySQL, когда данные в базе данных обновляются, диаграмма не обновляется.

Диаграмма отображается правильно, просто не обновляется.

Я новичок в PHP и chartjs. Любая помощь была бы замечательной

Независимо от того, что я пробовал, я не могу заставить работать .update или .destroy.

Моя последняя попытка включить кнопку для обновления данных при нажатии также не удалась.

Мой код: HTML:

<div id="chart-container">
    <canvas id="mycanvas"></canvas>
    <div class="toolbar">
        <button onclick="data">Refresh</button>

    </div>
</div>

<!-- javascript -->
<script type="text/javascript"
        src="modules/dashboards/js/jquery.min.js">
</script>
<script type="text/javascript"
        src="modules/dashboards/js/Chart.min.js">
</script>
<script type="text/javascript" src="modules/dashboards/js/app.js">
</script>

JS:

$(document).ready(function () {
    $.ajax({
               url: "http://localhost/mycharts/api/data.php",
               method: "GET",

               success: function (data) {
                   console.log(data);
                   var subholding = [];
                   var TotalAccounts = [];

                   for (var i in data) {
                       subholding.push("" + data[i].subholding);
                       TotalAccounts.push(data[i].TotalAccounts);
                   }

                   var chartdata = {
                       labels: subholding,
                       datasets: [
                           {
                               label: 'Total Accounts',
                               backgroundColor: [
                                   "red",
                                   "green",
                                   "blue",
                                   "purple",
                                   "magenta",
                                   "yellow",
                                   "orange",
                                   "black"
                               ],
                               borderColor: 'rgba(200, 200, 200, 0.75)',
                               hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                               hoverBorderColor: 'rgba(200, 200, 200, 1)',
                               data: TotalAccounts
                           }

                       ]
                   };

                   var ctx = $("#mycanvas");
                   var barGraph = new Chart(ctx, {
                       type: 'bar',
                       data: chartdata
                   });

                   function barGraph() {
                       subholding.push("" + data[i].subholding);
                       TotalAccounts.push(data[i].TotalAccounts);

                       data.update();
                   }
               },
               error: function (data) {
                   console.log(data);
               }
           });
});

Ожидаемые результаты: при обновлении данных в БД диаграмма обновляется автоматически или при обновлении / открытии страницы


person Chris Binstead    schedule 24.04.2019    source источник


Ответы (3)


Вы можете попытаться поместить код ur ajax в функцию setInterval

     setInterval(function(){ 

     //Here

      }, 3000);

Изменить: я имел в виду setInterval

person Ifaruki    schedule 24.04.2019
comment
извините за вопрос, это // здесь, где начинается строка $ .ajax - person Chris Binstead; 24.04.2019
comment
Да, 3000 означает, что каждые 3000 миллисекунд (3 секунды) он будет отправлять запрос в базу данных ur, поэтому каждые 3 секунды ваша диаграмма будет обновляться. - person Ifaruki; 24.04.2019
comment
Спасибо, что это работает, как бы то ни было, частота обновления должна идти между последним набором конечных скобок, обновление этой диаграммы каждые 3 секунды - это немного, я увеличил интервал до 30 секунд, но теперь жду 30 секунд для начальная диаграмма для визуализации - person Chris Binstead; 24.04.2019

Тогда попробуйте следующее:

JS

         $(document).ready(function () {
            $.ajax({
           url: "http://localhost/mycharts/api/data.php",
           method: "GET",

           success: function (data) {
               console.log(data);
               var subholding = [];
               var TotalAccounts = [];

               for (var i in data) {
                   subholding.push("" + data[i].subholding);
                   TotalAccounts.push(data[i].TotalAccounts);
               }

               var chartdata = {
                   labels: subholding,
                   datasets: [
                       {
                           label: 'Total Accounts',
                           backgroundColor: [
                               "red",
                               "green",
                               "blue",
                               "purple",
                               "magenta",
                               "yellow",
                               "orange",
                               "black"
                           ],
                           borderColor: 'rgba(200, 200, 200, 0.75)',
                           hoverBackgroundColor: 'rgba(200, 200, 
                              200, 1)',
                           hoverBorderColor: 'rgba(200, 200, 200, 1)',
                           data: TotalAccounts
                       }

                   ]
               };

               var ctx = $("#mycanvas");
               var barGraph = new Chart(ctx, {
                   type: 'bar',
                   data: chartdata
               });

               function barGraph() {
                   subholding.push("" + data[i].subholding);
                   TotalAccounts.push(data[i].TotalAccounts);

                   data.update();
               }
           },
           error: function (data) {
               console.log(data);
           }
       });
   });

   setInterval(function(){ 

 $(document).ready(function () {
            $.ajax({
           url: "http://localhost/mycharts/api/data.php",
           method: "GET",

           success: function (data) {
               console.log(data);
               var subholding = [];
               var TotalAccounts = [];

               for (var i in data) {
                   subholding.push("" + data[i].subholding);
                   TotalAccounts.push(data[i].TotalAccounts);
               }

               var chartdata = {
                   labels: subholding,
                   datasets: [
                       {
                           label: 'Total Accounts',
                           backgroundColor: [
                               "red",
                               "green",
                               "blue",
                               "purple",
                               "magenta",
                               "yellow",
                               "orange",
                               "black"
                           ],
                           borderColor: 'rgba(200, 200, 200, 0.75)',
                           hoverBackgroundColor: 'rgba(200, 200, 
                              200, 1)',
                           hoverBorderColor: 'rgba(200, 200, 200, 1)',
                           data: TotalAccounts
                       }

                   ]
               };

               var ctx = $("#mycanvas");
               var barGraph = new Chart(ctx, {
                   type: 'bar',
                   data: chartdata
               });

               function barGraph() {
                   subholding.push("" + data[i].subholding);
                   TotalAccounts.push(data[i].TotalAccounts);

                   data.update();
               }
           },
           error: function (data) {
               console.log(data);
           }
       });
   });

  }, 30000);
person Ifaruki    schedule 24.04.2019
comment
Еще раз спасибо, это работает до точки, начальный график загружается, после первой итерации интервала всплывают подсказки при наведении, затем график исчезает после второй итерации интервала - person Chris Binstead; 24.04.2019

В прошлом году я разработал аналогичный подход. Это был мой упрощенный подход:

  1. инициализировать диаграмму со всеми параметрами
  2. Вызов функции Chartrefresh
  3. Запустите запрос AJAX с помощью SetTimeout
  4. Вспомните функцию Chartrefresh

Я надеюсь, что это помогает.

$(document).ready(function() {  

    Chartrefresh(); 

});

var ctx = $("#mycanvas");
var myChartPF = new Chart(ctx, {

type: 'bar',
    data: {
        datasets: <?php echo json_encode($chartpfscore['data']); ?>,
        labels: <?php echo json_encode($chartpfscore['labels']); ?>,
    },
options: {
    responsive: true,
    title: {
        display: true,
        text: "Score ####",
        fontSize: 22,
    },
    tooltips: {
        mode: 'label'
    },
    legend: {
        display: true,
        position: 'bottom',
    },
    scales: {
        xAxes: [{
                    display: true,
                    scaleLabel: {
                        display: true,
                        labelString: '####'
                    }
                }],
        yAxes: [
                      {
                        stacked: false,
                        position: "left",
                        id: "y-axis-0",
                            scaleLabel: {
                                display: true,
                                labelString: 'Average Score'
                            },
                            ticks: {
                                beginAtZero: true,
                                stepSize: 5

                            }
                      }, {
                        stacked: false,
                        position: "right",
                        id: "y-axis-1",
                            scaleLabel: {
                                display: true,
                                labelString: '###########'
                            },

                             ticks: {
                                beginAtZero: true,
                                stepSize: 1
                            }
                      }
                ]
    }
}

});

function Chartrefresh()
    {
        // Function to autoupdate Chart

        setTimeout(function()
        {           

                $.ajax({
                    url : "<?php echo site_url('ajax/chartrequest')?>",
                    type: "GET",
                    dataType: "JSON",
                       success: function(newDataObject){

                    myChartPF.data.datasets = newDataObject;
                    window.myChartPF.update(); 
                    Chartrefresh();
                }
        }, 1000);

    }

Данные из PHP-контроллера выглядят следующим образом (данные и метки):

[{"data":["58.0000","44.0000","50.6000","49.0000","57.2222","45.6667"],"label":"Average Score","yAxisID":"y-axis-0","backgroundColor":["rgba(222, 30, 101, 0.8)","rgba(171, 158, 153, 0.8)","rgba(125, 94, 166, 0.8)","rgba(228, 110, 23, 0.8)","rgba(21, 62, 140, 0.8)","rgba(241, 214, 31, 0.8)"],"borderWidth":3},{"data":["8","1","5","4","9","3"],"label":"No. Of Resource Schedules","yAxisID":"y-axis-1","borderWidth":3}]


["ProjectA","ProjectB","ProjectC","ProjectD","ProjectE","ProjectF"]
person Skaw Colambia    schedule 24.04.2019
comment
Спасибо @Skaw, это позволило мне запустить обновление загрузки страницы для работы диаграммы, а теперь выяснить, почему функция тайм-аута AJAX не работает. При проверке кода он жалуется, что мои данные / наборы данных не определены. Есть указатели? - person Chris Binstead; 25.04.2019