Как мне обновить одно значение, отображаемое на моем сайте, с помощью JS? - PullRequest
1 голос
/ 22 марта 2020

Мне было трудно найти подходящее название для этого вопроса, надеюсь, это сработает ..

С помощью базы данных Firebase в реальном времени и некоторого кода Arduino я отображаю уровни влажности почвы в моем горшке. Веб-сайт. Однако, когда данные Firebase обновляются (каждые 0,3 секунды), вместо того, чтобы обновлять одно значение на веб-сайте, он добавляет новую строку / печатает каждое обновление. Через некоторое время мой веб-сайт теперь выглядит так: Moisture: 661Moisture: 658Moisture: 660Moisture: 658Moisture: 657, и он продолжает добавлять Moisture: xxx после него с каждым обновлением. Я хочу, чтобы это отображалось один раз, и pu sh, чтобы данные обновляли первое значение, а не добавляли новое. Я оставлю свой код ниже, хотелось бы несколько советов о том, как go в этом. Вроде трудно найти что-то об этом в inte rnet, так как я не уверен, что я ищу (новичок в JS). Заранее спасибо!

Код:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/styles.css">

    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-database.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-firestore.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-storage.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-messaging.js"></script>

    <script>
      // Initialize Firebase
      var config = {
        apiKey: "xx",
    authDomain: "xx",
    databaseURL: "xx",
    projectId: "xx",
    storageBucket: "xx",
    messagingSenderId: "xx",
    appId: "xx"
      };
      firebase.initializeApp(config);
    </script>


  <script>

    var database = firebase.database();


    var ref = firebase.database().ref("plant-patrol/Moisture");
    ref.once("value")
    .then(function(snapshot) {
    var key = snapshot.key; // "plant-patrol"
    var childKey = snapshot.child().key; // "Moisture"

    });
  </script>

<script>
    var ref = firebase.database().ref();
ref.on("value", function(snapshot) {
   console.log(snapshot.val());
    var snapshotJSON = JSON.stringify(snapshot.val());
    var moisture = snapshotJSON;
    moisture = moisture.replace(/[{""}]/g, '');
    moisture = moisture.replace(/[:]/g, ': ');
    document.write(moisture);


}, function (error) {
   console.log("Error: " + error.code);
});
    </script>  



    <script src="/script.js" defer></script>
  </head>
</html>

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

var div = document.getElementById('moisture');
div.innerHTML = 'Moisture: 55%';
<div id='moisture'></div>
1 голос
/ 22 марта 2020

Вы используете document.write(mosture). Это записывает переменную moisture в документ при каждом получении.

Вам нужно заменить указанный c текст в документе. Для этого вы должны создать элемент с уникальным идентификатором, например:

<div id='moisture'></div>

Сначала присвойте этот элемент переменной:

var moistureDiv = document.getElementById('moisture');

Затем удалите document.write(moisture) и добавьте этот код для замены текста элемента с «влажностью» ID:

moistureDiv.innerHTML = moisture;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...