php und Ajax

So sieht nun mein Head-Bereich aus:
Code:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
   <script type="text/javascript">
   setInterval(function () {
            $.ajax({
                url: "getdata.php",
                dataType: "json",
                success: mysuccess
            });
        }, 1000);
        function mysuccess(data) {
            for (var i = 0; i < data.length; i++) {
                if (data[i]) {
                    document.getElementById("status" + (i + 1)).src = "1.gif";
                } else {
                    document.getElementById("status" + (i + 1)).src = "0.gif";
                }
            }
        }
 
</script>

So die getdata.php nach dem mysqly-query:
Code:
$status = Array(0,0,0,0);
echo json_encode($status);

Und so der div-container:
Code:
<div id="1">
   <img id="status1" width="100px" height="10px" alt="">
</div>
 
Sorry, habe den Fehler gefunden.
Ich hatte noch kein 0.gif auf dem Server.
Ich dachte, das das 1.gif auf jedenfall verschwindet, wenn Status 0. Dem ist aber nicht so. Das Script will auf jedenfall das Bild austauschen.
 
Ja, so ist es. Dann funktioniert es jetzt offenbar.
Ich habe jetzt eine andere Aktivität, wenn doch noch etwas nicht funktioniert, unterstützt dich sicher jemand anders.
Vielleicht bis demnächst - beste Grüße!
 
Auf jeden Fall. Werde öfter mal vorbei schauen.
Scheint jetzt soweit zu funktionieren. Außer beim wechsel von 1.gif auf 0.gif scheint es zu haken. Komisch...
Ich habe jetzt die Abfragezeit von 1 sec auf 5 sec erhöht. jetzt scheint es besser zu funktionieren.

Beste Grüße und noch einmal vielen Dank für die Hilfe.
Chris
 
Ich hab noch was...
Das Script funktioniert nun super. Danke noch Mal an Sempervivum!
Ich würde jetzt gerne mehrere Variablen aus der getdata.php übernehmen und weiterverarbeiten.
Wie baue ich das denn in die setInterval function ein?
Anstelle eines Bildes würde ich in einem div-container gerne einen Text anzeigen, wenn eine der 4 Variablen "1" enthält.
Also so z.B.:
Wenn status[0] eine 1 hat, dann schreibe in den div-container id="alpha" :"Var1 eingeschaltet!"

Ist soetwas möglich?
Die Texte würden in einem Text Array auf getdata.php liegen. Die " Indexe " der beiden Arrays (status und text) passen zusammen. Also wenn status[1] == 1 dann gib den Text von text[1] aus.

Viele Grüße
Chris
 
Das ist selbstverständlich kein Problem. Aber wenn wir bei dem Verfahren mit JSON bleiben wollen, müssen alle Parameter in einer Struktur liegen. Das wäre dann auf PHP-Seite ein assoziatives Array und auf JS-Seite ein Objekt, was im wesentlichen das Gleiche ist, wie ein ass. Arr.
Dann müsste die Struktur bzw. das Array so aussehen:
{"status": [1,0,1,1]], "text": ["Var1 eingeschaltet","Var2 eingeschaltet","Var3 eingeschaltet","Var4 eingeschaltet"]}
Die Funktion für die Anzeige müsste dann so aussehen:
Javascript:
        function mysuccess(data) {
            for (var i = 0; i < data.status.length; i++) {
                if (data.status[i]) {
                    document.getElementById("status" + (i + 1)).src = "1.gif";
                    document.getElementById("text" + (i + 1)).textContent = data.text[i];
                } else {
                    document.getElementById("status" + (i + 1)).src = "0.gif";
                    document.getElementById("text" + (i + 1)).textContent = "";
                }
            }
        }
Edit: Oder habe ich es jetzt falsch verstanden und Du möchtest die Texte anstelle der Bilder anzeigen? Wenn ja, kannst Du das Verfahren sicher entspr. vereinfachen.
 
Zuletzt bearbeitet:
Gut das Du wieder da bist. :)
Ist das so eine Art mehrdimensionales Array oder tatsächlich ein assoziatives Array?
Bei einem Assoziativem Array wäre ja status der key und dann gibt es noch einen Index pro key?
Muss mal schauen, wie der genaue Syntax in php ist. Habe bisher noch kein Assoziatives Array gebraucht.
Ich denke es wird Zeit sich wieder mehr mit der Materie zu beschäftigen. Macht wieder richtig Spass.
 
Das sieht doch schon mal gut aus, oder?

Code:
$status = array(1,0,1,1);
$text = array('Variable 1 ein', 'Variable 2 ein', 'Variable 3 ein', 'Variable 4 ein');
$status = array_combine($status, $text);
 
Denke eher, dass es das nicht ist: array_combine war mir neu und das setzt lt. Doku voraus, dass ein Array die Schlüssel und das andere die Werte enthält. Das würde nicht funktionieren, weil Schlüsselwerte mehrfach auftreten würde. IMO müsste es eher so aussehen:
$data = array("status" => $status, "text" => $text);
So würde es jedenfalls zu dem JS passen, was ich oben gepostet habe.
 
Zurück