XMLHttpRequest предотвращает отображение моей кривой в скрипте

#javascript #php #html #jquery

Вопрос:

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

вот мои коды :

index.php

 <?php 
    include("connexion.php");
 ?>
<html>
<head>
    <title>
    </title>
    <!-- CSS only -->

<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C OGpamoFVy38MVBnE IbbVYUew OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft 2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704 h835Lr 6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
        <div id="link_wrapper">

        </div>

    </div>
</body>
</html>
<script>
  
function loadXMLDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 amp;amp; this.status == 200) {
      document.getElementById("link_wrapper").innerHTML =
      this.responseText;
    }
  };
  xhttp.open("GET", "server.php", true);
  xhttp.send();
}
setInterval(function(){
    loadXMLDoc();
    // 1sec
},1000);

window.onload = loadXMLDoc;
</script>
 

Я получаю данные в реальном времени благодаря ajax jquery, но я не могу изменить свою кривую

Я использую библиотеку lq canavasjs для отображения кривой, когда я не интегрировал ajax внутри, мой код отображал кривую без проблем, поэтому я говорю себе, что auie c возможен, это ajax

server.php

 <?php

include('connexion.php');
$query = mysqli_query($db, "SELECT valeur from tension ORDER BY id DESC LIMIT 1");
while($row = mysqli_fetch_array($query)){
        $tension = $row['valeur'];
        echo $tension;
    }
echo "sortir";  
$dataPoints = array();
$y = $tension;


for($i = 0; $i < 10; $i  ){
  $y = $y; 
  array_push($dataPoints, array("x" => $i, "y" => $y));
}
 echo "naubout";
?>


<!DOCTYPE HTML>
<html>
<head>
  <script>
window.onload = function() {
 
var dataPoints = <?php echo json_encode($dataPoints, JSON_NUMERIC_CHECK); ?>;

var chart = new CanvasJS.Chart("chartContainer", {
  theme: "light2",
  title: {
    text: "Valeur detension en temps reel"
  },
  axisX:{
    title: "Time in millisecond"
  },
  axisY:{
    suffix: " V"
  },
  data: [{
    type: "line",
    yValueFormatString: "#,##0.0#",
    toolTipContent: "{y} V",
    dataPoints: dataPoints
  }]
});
chart.render();
 
var updateInterval = 1500;
setInterval(function () { updateChart() }, updateInterval);
 
var xValue = dataPoints.length;
var yValue = dataPoints[dataPoints.length - 1].y;
 
function updateChart() {
  yValue  = (Math.random() - 0.5) * 0.1;
  dataPoints.push({ x: xValue, y: yValue });
  xValue  ;
  chart.render();
};
 
}
</script>
  
</head>
<body>
  

</body>
<div id="chartContainer" style="height: 370px; width: 100%;"></div>
<script src="canvasjs.min.js"></script>
</html> 

 

connexion.php

 <?php 
    $servername = "localhost";
    $username  = "root";
    $password = "";
    $dbname = "iot";



    $db = mysqli_connect($servername, $username, $password, $dbname);

    if (!$db) {
        die("Connection Failed". mysqli_connect_error());
    }
 ?>

 

Комментарии:

1. вы проверили, что ваш вызов ajax действительно возвращает то, что вы думаете, каково содержание this.responseText

2. спасибо, я не знаю, потому что я впервые использую ajax, цель которого-получать данные в режиме реального времени из моей базы данных. Но я думаю, что он возвращает только тексты, однако, когда я пытаюсь отобразить текст в server.php внутри тега сценария он не отображается

3. Добро пожаловать в Stack Overflow. Возможно, вы захотите рассмотреть возможность использования .load() . Также помните, что <script> теги часто не используются или не загружаются с данными HTML, запрошенными AJAX. Я бы посоветовал обновить ваш PHP, чтобы собрать и собрать данные и представить их в виде JSON или XML (вместо HTML). Таким образом, ваш JavaScript может вызывать данные с сервера и выполнять необходимые операции для их отображения.

4. Спасибо, да, я попробую загрузить (), чтобы лучше понять мою ситуацию, теги скрипта не учитываются при запросе ajax?

Ответ №1:

Учесть следующее.

Создайте PHP, что-то вроде getDataPoints.php:

 <?php
include('connexion.php');
$query = mysqli_query($db, "SELECT valeur from tension ORDER BY id DESC LIMIT 1");
$x = 0;
$y = 0;
$dataPoints = array();
while($row = mysqli_fetch_array($query)){
  $y = $row['valeur'];
}
for($x; $x < 10; $x  ){
  array_push($dataPoints, array($x, $y);
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($dataPoints);
?>
 

Теперь, когда ты позвонишь getDataPoints.php, вы должны увидеть результаты JSON (например $y ,= 1 ):

 [
  [0, 1],
  [1, 1],
  [2, 1],
  [3, 1],
  [4, 1],
  [5, 1],
  [6, 1],
  [7, 1],
  [8, 1],
  [9, 1]
];
 

Теперь вы можете делать такие вещи, как:

 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C OGpamoFVy38MVBnE IbbVYUew OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft 2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704 h835Lr 6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>

<script>
var dataPoints, chart;

$.getJSON("getDataPoints.php", function(results){
  dataPoints = results;
  chart = new CanvasJS.Chart("chartContainer", {
    theme: "light2",
    title: {
      text: "Valeur detension en temps reel"
    },
    axisX:{
      title: "Time in millisecond"
    },
    axisY:{
      suffix: " V"
    },
    data: [{
      type: "line",
      yValueFormatString: "#,##0.0#",
      toolTipContent: "{y} V",
      dataPoints: dataPoints
    }]
  });
  chart.render();
});
</script>

<div class="container">
  <div id="link_wrapper">
    <div id="chartContainer" style="height: 370px; width: 100%;"></div>
    <script src="canvasjs.min.js"></script>
  </div>
</div>
 

Комментарии:

1. спасибо, когда я использую ваш код, ничего не отображается

2. @essayator Вы захотите сначала протестировать PHP. Убедитесь, что запросы к нему дают правильный ответ. Затем вы можете просмотреть свой код на стороне клиента в браузере. Видите ли вы ошибки в своей консоли. Что на вкладке «Сеть» ищет запрос и ответ?

3. Спасибо, я получаю таблицу от json, но я не могу нарисовать кривую,

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

5. @essayator поскольку ваш пример опирается на данные сервера, я не могу помочь дальше. Я не могу воспроизвести проблему или протестировать дальнейшие решения без надлежащих примеров.