Как получить значение из выбора даты, используя данные из API - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть API, который работает локально (localhost), используя django rest framework. Это JSON API выглядит следующим образом:

[
{
    "id": 2,
    "timestamp": "2020-03-15T11:46:10+07:00",
    "vibration": 3,
    "moisture": 70,
    "gps_latitude": "-7.7713794",
    "gps_longitude": "110.3753111",
    "gyro_x": 6.58,
    "gyro_y": 85.0,
    "gyro_z": -3.9,
    "accelero_x": 6.58,
    "accelero_y": 85.0,
    "accelero_z": -3.9,
    "displacement": 10,
    "node_id": 1
},
{
    "id": 6,
    "timestamp": "2020-03-15T12:00:10+07:00",
    "vibration": 3,
    "moisture": 75,
    "gps_latitude": "-7.7713794",
    "gps_longitude": "110.3753111",
    "gyro_x": 6.58,
    "gyro_y": 85.0,
    "gyro_z": -3.9,
    "accelero_x": 6.58,
    "accelero_y": 85.0,
    "accelero_z": -3.9,
    "displacement": 10,
    "node_id": 1
},
{
    "id": 7,
    "timestamp": "2020-03-15T13:00:10+07:00",
    "vibration": 3,
    "moisture": 75,
    "gps_latitude": "-7.7713794",
    "gps_longitude": "110.3753111",
    "gyro_x": 6.58,
    "gyro_y": 85.0,
    "gyro_z": -3.9,
    "accelero_x": 6.58,
    "accelero_y": 85.0,
    "accelero_z": -3.9,
    "displacement": 10,
    "node_id": 1
},
{
    "id": 8,
    "timestamp": "2020-03-16T07:00:00+07:00",
    "vibration": 3,
    "moisture": 80,
    "gps_latitude": "-7.7713794",
    "gps_longitude": "110.3753111",
    "gyro_x": 6.58,
    "gyro_y": 85.0,
    "gyro_z": -3.9,
    "accelero_x": 6.58,
    "accelero_y": 85.0,
    "accelero_z": -3.9,
    "displacement": 10,
    "node_id": 1
}
]

Я хочу отобразить данные (влажность) в линейном графике, поэтому я делаю код следующим образом:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">

<title>Try Chart</title>

<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>


<script>

function dspChrt(hum, time) {

var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: time,
datasets: [{
  label: 'Humidity',
  data: hum, // json value received used in method
  backgroundColor: ["rgba(153,255,51,0.4)"],
  borderColor: ["#808080"],
  borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
  yAxes: [{
    ticks: {
      suggestedMin : 0,
      suggestedMax : 100,
      stepSize: 10,
    },
    scaleLabel: {
      display: true,
      labelString: 'Humidity (%)'
    }
  }],
  xAxes: [{
    scaleLabel: {
      display: true,
      labelString: 'Date Time'
    }
  }]
}
}
});
}
</script>

<script>
var myVar = setInterval(loadChart, 60000); // updates chart every one minute

function loadChart()
{
var data, hum = [], time = [];

var requestURL = 'http://127.0.0.1:8000/api/data'; //URL of the JSON data
var request = new XMLHttpRequest({mozSystem: true}); // create http request

request.onreadystatechange = function() {
 if(request.readyState == 4 && request.status == 200) {
    data = JSON.parse(request.responseText);
    for (var i=0; i<data.length;i++) {
        hum.push(data[i].moisture);
        time.push(data[i].timestamp);
    }
    console.log(hum);
    console.log(time);
    console.log(data);

    dspChrt(hum, time);   
}
}
request.open('GET', requestURL);
request.send(); // send the request

}
loadChart();
</script>


</head>


<body onload="loadChart()">

<div class="container">

<h2>Try Chart</h2>

<div>
<canvas id="myChart"></canvas>
</div>

</div>


</body>
</html>

Диаграмма выглядит следующим образом: The Line Chart

Я хочу добавить средство выбора даты, чтобы можно было выбирать данные от одной даты до другой выбранной даты. Как добавить указатель даты в код? Кто-нибудь может помочь мне с кодом? Извините, я новичок ie программист. Тогда до

1 Ответ

0 голосов
/ 14 апреля 2020

Я пытался использовать ajax как этот, но средство выбора даты не работало. Он просто отображает все данные, которые я не выбрал

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">

  <title>Try Chart</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js">
  </script>

  <!-- <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"> 
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"> 
    </script> -->

  <link href="https://fonts.googleapis.com/css? 
    family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
  <script>
    $(document).ready(function() {
      $.datepicker.setDefaults({
        dateFormat: 'yy-mm-dd'
      });
      $("#firstdatepicker").datepicker();
      $("#lastdatepicker").datepicker();
      $("#filter").click(function() {
        var from_date = $("#firstdatepicker").val();
        var to_date = $("#lastdatepicker").val();
        if (from_date != '' && to_date != '') {
          console.log(from_date, to_date);
          var endpoint = '/api/data'

          $.ajax({
            method: "GET",
            url: endpoint,
            data: {
              from_date: from_date,
              to_date: to_date
            },
            success: function(data) {
              console.log(data); //get all data
              //get data by fields
              var hum = [],
                time = [];
              for (var i = 0; i < data.length; i++) {
                hum.push(data[i].moisture);
                time.push(data[i].timestamp);
              }
              console.log(hum);
              console.log(time);
              //plot the chart

              var ctx = document.getElementById("moistureChart").getContext('2d');
              var moistureChart = new Chart(ctx, {
                type: 'line',
                data: {
                  labels: time,
                  datasets: [{
                    label: 'kelembaban',
                    data: hum,
                    backgroundColor: [
                      'rgb(68, 145, 252)'
                    ],
                    borderColor: [
                      '#331698'
                    ],
                    borderCapStyle: 'round',
                    borderWidth: 1
                  }]
                },
                options: {
                  reponsive: true,
                  scales: {
                    yAxes: [{
                      ticks: {
                        beginAtZero: true,
                        stepSize: 10
                      },
                      scaleLabel: {
                        display: true,
                        labelString: 'kelembaban'
                      }
                    }],
                    xAxes: [{
                      display: true,
                      ticks: {
                        min: from_date,
                        max: to_date,
                      },
                      scaleLabel: {
                        display: true,
                        labelString: 'Tanggal'
                      }
                    }]
                  }
                }
              });
            },
            error: function(error_data) {
              console.log(error_data)
            }
          });
        } else {
          alert("Please Select Date");
        }
      });
    });
  </script>


</head>


<body>
  <div class="container-fluid">
    <!--Breadcrumbs-->
    <ol class="breadcrumb">
      <li class="breadcrumb-item">
      </li>
      <li class="breadcrumb-item active">Charts</li>
      <li style="margin-left: 10px">
        data from <input type="text" id="firstdatepicker" name="firstdatepicker" value=""> to <input type="text" id="lastdatepicker" name="lastdatepicker" value="">
        <input type="button" name="filter" id="filter" value="Filter" class="btn btn- 
    info">
      </li>
    </ol>
    <div class="row">
      <div class="col-sm-1"></div>
      <canvas id="moistureChart" width="722" height="400">
            </canvas>
      <div class="col-sm-1"></div>
    </div>
  </div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.2/jquery.ui.datepicker.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script>

  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.2/themes/sunny/jquery-ui.min.css"></link>
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"></link>

</body>

</html>
...