Rolf B: PHP mit Onlineaktualisierung

Beitrag lesen

Hallo Henry,

Wieder über ajax/fetch oder ???

Wenn die Daten live in der Website stehen und bspw. alle 5 Sekunden aktualisiert werden sollen, dann ja.

Ich könnte auch die html Seite parsen und alle "Messwerte" vor der Ausgabe befüllen und ausgeben.

DAS kapiere ich nun gar nicht. Welche HTML Seite willst Du wo parsen?

Eine billige, aber schlechte Lösung ist, in den <head> der Seite einen refresh einzusetzen (siehe Wiki):

<meta http-equiv="refresh" content="5">

Die Seite lädt sich dann alle 5s neu, und wenn das eine PHP Seite ist, kann sie die Messwerte neu befüllen. Aber das flackert rum, stört beim Scrollen und ist ein Gruß aus dem letzten Jahrtausend.

Eine einfache Lösung ist: Im JavaScript über setInterval einen 5s Timer setzen und darüber den Ajax-Ablauf anstoßen.

PHP-seitig ein spezielles Script verwenden, das nicht text/html als Ausgabetyp erzeugt, sondern bspw. application/xml oder application/json.

JSON ist insofern einfacher, weil man dafür ein assoziatives Array in PHP aufbauen kann und mit json_encode einfach umwandeln kann

$data = [ "foo" => 3, "bar" => 17, "werte" => [ 4,7,9] ];

header("ETag: \"" . (new DateTimeImmutable())->format('c') . "\"");
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($data);

ergibt

{"foo":3,"bar":17,"werte":[4,7,9]}

Das ständig neue ETag verhindert das Caching des Abfrageergebnisses. Einen aus Client-Sicht identischen Service kannst Du übrigens auch mit ASP.NET und C# programmieren.

Im JavaScript dann einfach in einer async-Funktion dies:

setInterval(refreshData, 5000);

async function refreshData() {
   const response = await fetch("api.php");
   if (response.ok) {
      const data = await response.json();
      // Ergebnis in data.foo, data.bar und data.werte
   }
}

Das ist natürlich nur eine Skizze.

Wenn Du einen Server hast, auf dem Du node.js hosten kannst, dann KÖNNTEST Du auch eine Websocket-Verbindung machen und Datenupdates vom node.js aus pushen, statt sie per JavaScript zu holen. Aber das ist deutlich aufwändiger, insbesondere die Dauerbetriebsfestigkeit.

Rolf

--
sumpsi - posui - obstruxi