Morris.js setData не работает, если я не сделаю это - PullRequest
0 голосов
/ 05 апреля 2019

Я строю графики на основе результатов базы данных и получаю данные через ajax. Предполагается, что график перерисовывается на основе запроса с использованием jquery setData. Я спрашивал других программистов на работе и до сих пор не могу понять это.

php код

if(isset($_POST['data'])){

        $data = $_POST['data'];
        $data = json_decode($data);


        $query = "SELECT * FROM bad_errors WHERE rel = '$data' LIMIT 20";

        $result = $db->query($query);
        $chart_data = '';
        while($row = mysqli_fetch_array($result))
        {

          $month = date("M", strtotime($row['date_time']));

          $chart_data .= "{ month:'".$month."', website:".$row["rel"].", code:".$row["code"]."}, ";
        }
        $chart_data = substr($chart_data, 0, -2);


      $data = json_encode($chart_data);
       echo $data;

}

код запроса

let barChart = Morris.Bar({
   element : 'chart',
   data:[],
   xkey:'month',
   ykeys:['website', 'code'],
   labels:['website', 'code'],
   hideHover:'auto',
   stacked:true
  });



let json = JSON.stringify(rel);
  $.ajax({
        url: "ajax-php/morris-data.php",
        type: "POST",
        data: {data: json},
        dataType:"json",
        success: function (data) {

        //data variable only redraws the graph if data looks like this -  

data = [
{ month:'Mar', website:38, code:547}, { 
month:'Mar', website:38, code:584}, { month:'Mar', website:38, 
 code:500}, { month:'Mar', website:38, code:564}, { month:'Mar', 
 website:38, code:500},
  ]
        barChart.setData(data); // but not here via ajax success
  },


 });

1 Ответ

1 голос
/ 06 апреля 2019

Я неправильно обрабатывал данные в php

    while($row = mysqli_fetch_array($result))
    {
     $month = date("M", strtotime($row['date_time']));

      $data[] = array(
        'month' => $month,
        'website' => $row['rel'],
        'code' => $row['code']
      );

    }

$data = json_encode($data);
echo $data;
...