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

Mhh, is doch alles n bissi neu... Mit fehlt grad der Faden zum Weitermachen. Also:
Mit
Javascript:
function alle5sec()
                {
                    $.ajax("gpio_status.php").done(function(data){
                    //hier hat man die daten in data
                    console.log(data);                   
                    });
                }
weiß ich nun alle 5sec, ob in data der Wert 0 oder 1 steht. Wie kann ich das jetzt in php verwenden? Mit einer if-Anweisung komme ich ja nun nicht mehr weiter, da das reload der gesamten Seite ja nun abgestellt ist. Jetzt könnte ich am Anfang der Seite die Javascript-Funktion aufrufen lassen. Dann ganz unten die if-Anweisung mit der Abfrage, ob der Wert 0 oder 1 ist. Sollte sich der Wert aber nach z.B. 10sek ändern, bekommt das die if natürlich nicht mit. PHP wurde ja fertig ausgeführt.
Verstehst du was ich meine? Wie reagiere ich nun mit PHP auf den Zustand des Wertes 0 bzw 1 ? Und das zu "jeder" Zeit, nicht nur nach dem Neuladen der Seite... Das ist im Moment mein Problem, um überhaupt weiter zu machen. Sonst müsste ich wieder umschwenken auf refresh alle 5 sek :(
 
Mit einer if-Anweisung komme ich ja nun nicht mehr weiter, da das reload der gesamten Seite ja nun abgestellt ist.
Doch, weil die PHP-Datei schon alle 5sec aufgerufen wird (zumindest die zweite, nicht die die die Seite ursprünglich macht). Nur der menschliche Benutzer merkt nichts mehr davon, dass die Seite neu geladen wird.
 
Offenbar möchtest Du, abhängig von dieser Variablen, noch mehr auf deiner Seite ändern. Das geht dann jedoch nicht mit PHP, sondern du musst es mit Javascript machen. Zur Unterstützung kannst Du jedoch weitere Daten in dem PHP-Skript ermitteln und zurück geben.
Am besten beschreibst Du mal, was die Änderung der Variablen bewirken soll, bzw. was auf der Seite geändert werden soll.
 
Danke@Sempervivum, ich hab mich wohl bisher etwas unklar ausgedrückt. Es ist so, dass ich auf die Variable reagieren muss. Und zwar abhängig vom Wert. Ist dieser = 1, mach das, ist er = 0 mache was anderes. Am liebsten wäre mir, wenn ich mit JS meine test.sh und neu.sh aufrufen kann. Im Netz habe ich aber gelesen, dass dies extrem unsicher wäre und daher bei JS nicht geht. Da würde also bereits das nächste Problem auf mich zukommen.
Scheinbar ist wohl JS nicht ganz so schön wie PHP (zumindest bis jetzt nicht, PHP sieht für mich als Anfänger noch recht einfach aus, JS schon nicht mehr :( )
 
Ich glaube, jetzt verstehe ich, Du musst Aktionen auf dem Server abhängig von der Variablen ausführen und nicht auf dem Client. Auf dem Server und in dem Skript, das Du mit Ajax aktivierst, und dessen URL Du an Ajax übergibst, steht dir ja die Variable ebenso zur Verfügung und dort kannst Du weitere Aktionen ausführen und weitere Skripts aufrufen wie dein test.sh und neu.sh.

Im Netz habe ich aber gelesen, dass dies extrem unsicher wäre und daher bei JS nicht geht.
Das trifft zu und das ist gut so. Wärest du erfreut, wenn jede x-beliebige Seite Skripte oder Programme auf deinem Computer ausführen kann?
 
Eigentlich müsste ich doch "nur" in der JS-Funktion
Javascript:
function alle5sec()
                {
                    $.ajax("gpio_status.php").done(function(data){
                    //hier hat man die daten in data
                    console.log(data);                
                    });
                }
noch eine If einbauen, welche dann prüft, ob der Wert 0 oder 1 ist. Und je nach Ergebnis starte ich dann neu.sh oder test.sh - ich würde das in der Zeile 4 abfragen, also da wo grad console.log steht. Oder darf ich in der Funktion dann meine neu.sh nicht aufrufen?
 
Ich gehe davon aus, dass diese beiden Skripts auf dem Server laufen? Auf dem Client können sie nicht laufen, weil
  • Javascript das nicht zulässt, s. o.
  • sie betriebssystem-spezifisch sind.
Die Funktion alle5sec ist Javascript und läuft auf dem Client und hat keinen Zugriff auf Vorgänge/Skripts auf dem Server.
 
Mit diesem Codeschnippsel sollte es dir gelingen, jede 5. Sekunde eine Abfrage durchzuführen, in der überprüft wird ob die Rückgabe der Ausführung von "exec('gpio read 7')" = 1/0 entspricht. Je nachdem sollte sich "shell_exec('test.sh')" oder "shell_exec('neu.sh')" aufrufen. Bei "shell_exec('test.sh')" ist jedoch die Bedingung gesetz, das sie maximal im Intervall von 5 Sekunden aufgerufen werden kann. Ich hoffe ich konnte dir weiter helfen.

Code:
        $(document).ready(function(){
               setInterval($.ajax('gpio_status.php'), 5000);
           });
gpio_status.php
PHP:
<?php
   session_start();
    $value1 = exec('gpio read 7');
   if($value1){
       if(!isset($_SESSION['ausgefuehrt']) || ($_SESSION['ausgefuehrt']<=time()-5)){
       $_SESSION['ausgefuehrt'] = time();
       shell_exec('test.sh');
       }
   }else{
       session_destroy();
       shell_exec('neu.sh');
   }
?>
 
Ich gehe davon aus, dass diese beiden Skripts auf dem Server laufen?
Japp, hatte ich nirgends erwähnt.


Öhm, ja. Erst mal danke für den Code. Ich hab ihn noch nicht getestet ob er funktioniert. Jedoch stellt sich natürlich die Frage, was ich davon verstanden habe. Weil nur abtippen bringt mich zwar hier weiter, mehr aber auch nicht. Also:

auf meiner test.php prüft Javascript
Javascript:
setInterval($.ajax('gpio_status.php'), 5000);
wie der GPIO belegt ist, und zwar alle 5 sek. Bis hierhin simple und klar.

Aber warum ist meine gpio_status.php jetzt so aufgebläht? Es wird jetzt also in der gpio_status.php der GPIO abgefragt und gleichzeitig auf das Ergebnis reagiert? Und das komplett im Hintergrund? Und sehe ich das richtig, dass JS nun alle 5 sek meine gpio_status.php aufruft? Ist das also ein "versteckter" refresh der gpio_status.php? Das ist ja echt genial :-o

EDIT: Nein, ich habs glaub grad verstanden. in der gpio_status.php wird alles ausgeführt (alsp GPIO Abfrage und Script ausführen) und die
Javascript:
setInterval($.ajax('gpio_status.php'), 5000);
auf meiner test.php führt diese gpio_status.php alle 5 sek aus ?!? So isses
 
Zuletzt bearbeitet:
Wenn du in der test.php den erwähnten JS-Code vorliegen hast, so wird beim Aufruf von test.php jede 5. Sekunde gpio_status.php aufgerufen. Beim Aufruf von "gpio_status.php" wird "exec('gpio read 7')" ausgeführt. Je nach Rückgabewert wird "shell_exec('test.sh');" oder "shell_exec('neu.sh');" aufgerufen. Bei "shell_exec('test.sh');" wird serverseitig festgestellt das sie max. im Intervall von 5. Sekunden aufgerufen werden kann. Kurz gesagt: test.php löst im 5 Sekunden intervall gpio_status.php aus.
 
Zurück