"meta http-equiv=refresh content=5" mit AJAX realisieren

noobee

Grünschnabel
Hallo zusammen,

ich bin noch recht neu in php. Mit
PHP:
meta http-equiv="refresh" content="5"
habe ich bisher meine Seite (status_test.php) komplett refreshen lassen, um für eine Variable
PHP:
$value1 = exec('gpio read 7');
alle 5 Sekunden den aktuellen Wert zu bekommen. Jedoch ist dies natürlich immer ein reload der ganzen Seite. Jetzt habe ich im Netz gelesen, dass man das auch mit AJAX machen kann, ohne ständig zu reloaden. AJAX kann wohl die Variable selber erneut einlesen alle XX Sekunden. Somit würde der komplette reload der Seite weg bleiben.
Da ich mit AXAJ keine Erfahrungen habe, fehlt mir da im Moment alles :(
 
Hi

Ja. "Ajax" bezeichnet prinzipiell eine Möglichkeit, per JS bei der geladenen Seite Daten vom Server anzufragen und damit irgendwas zu machen, zB. an einer bestimmten Stelle in die Seite einfügen (oder auch sonst irgendwas).

Die Ausgabe von $value1 ist also in die eigentliche Seite eingebaut?
Schritt 1: Zusätzlich wäre gut, eine PHP-Datei zu haben, die nur diesen Wert zurückgibt, kein HTML drumherum. Das wird dann das sein, was per JS abgefragt wird. Wenn die originale Seite geladen wird müsste man sich den Wert erst umständlich aus dem ganzen HTML-Zeug raussuchen (oder die gesamte derzeitige sichtbare Seite mit der neuen ersetzen, was ein paar mögliche Probleme hat).

Schritt 2: Damit es später auch was bringt muss das meta-refresh weg. Es wird dann, wwenn es fertig ist, zwar nur noch mit JS funktionieren (also bei Leuten die NoScript verwenden etc. nicht mehr), aber eine perfekte Lösung gibts da leider nicht: Zu sagen "mach das meta-refresh nur wenn kein JS möglich ist" geht leider nicht (soweit ich weiss).

Schritt 3: Geht zwar auch ohne, aber um es möglichst angenehm zu haben: JQuery einbinden (eine JS-Lib, also im wesentlichen mehr fertige Funktionen zum verwenden). Die aktuelle Version ist hier: https://code.jquery.com/jquery-3.1.1.min.js Auf den Server speichern. Im Html <head> dann sowas
Code:
<script src="jquery.js"></script>
mit dem passenden Dateinamen.

Schritt 4: Eine Funktion machen, die alle 5 Sekunden ausgeführt wird. Mit JQuery zB. so (gleich nach dem oberen Code):
Code:
$(document).ready(function()
{
    function alle5sec()
    {
    }
    setInterval(alle5sec, 5000);
});
Also wenn die Seite genug geladen ist um das zu machen (ready), dann diese noch leere Funktion für eine Ausführung alle 5 Sekunden einplanen.

Schritt 5: Die eigentliche Serveranfrage, in der Funktion alle5sec: Sehr einfach mit JQ:
Code:
$.ajax('einephpdatei.php').done(function(data){
    //hier hat man die daten in data
});
Die PHP-Datei angeben, die nur den Wert zurückgibt.

Letzter Schritt 6: Den erhaltenen Wert in die Seite einfügen. Wie, das hängt davon ab, wie die HTML-Struktur zurzeit aufgebaut ist und wo der Wert steht...
 
Zuletzt bearbeitet:
Ok, das war wohl nicht so einfach :(

PHP:
<head>
    <script src="jquery/jquery.min.js"></script>
    <script>
        $(document).ready(function()
            {
                function alle5sec()
                {
                    $.ajax('gpio_status.php").done(function(data){
                    //hier hat man die daten in data
                    console.log(data);
                    });
                }
                setInterval(alle5sec, 5000);
            });
    </script>
   
</head>

und in meiner gpio_status.php steht nur drin
PHP:
<?php
    $value1 = exec('gpio read 7');
?>

In dieser Fehlerkonsole bei Firefox sollte jetzt nach meinem Verständnis doch eine 1 oder 0 stehen. Ist aber leer :-o
 
Zwei Fehler:
a) JS: Das 'gpio_status.php" beginnt mit ' und endet mit ". Das müssen zwei gleiche Anführungszeichen sein.
(merk gerade, dass ich das schon falsch gemacht habe, sorry)
b) PHP: Das Ergebnis von exec einer Variable zuweisen reicht nicht, die muss mit echo auch ausgegeben werden.
 
Dumme Frage: da ich ja jetzt das Ergebnis in der
Javascript:
function alle5sec()                { ... }
habe, muss ich sicher meinen ganzen php-code in javascript schreiben... Denn nur in der Funktion wird ja geprüft, ob die Variable 0 oder 1 ist, richtig? Das wäre ja schade - also alles "umschreiben" ...
 
Na wenn der Wert gleich 0 oder 1 ist, will ich dann weitere Schritte in PHP realisieren. Aber ich habe den Wert ja nun "nur" in javascript vorliegen. Deshalb dachte ich, ich muss die weiteren Schritte nun in Javascript realisieren
 
Aber was soll PHP dann machen?
...
Wenn es darum geht, serverseitig etwas zu tun, kann das mit in die PHP-Datei, kein Problem. Der Grund für die Abtrennung ist nur, dass die zweite Datei nicht dafür gedacht ist, von Menschen verwendet zu werden.
 
Also ich möchte dann z.B. eine Kamera etc ansprechen, wenn der Wert gleich 1 ist. Das Ansprechen erfolgt bisher über PHP ((shell_exec('...');)
 
Wie gesagt, kein Problem, alles geht. Der einzige wirkliche Unterschied ist, dass man in PHP nicht direkt die Seite ausgibt, sondern Daten an JS sendet und das damit irgendwas macht,
 
Zurück