php und Ajax

Guten Morgen,
auch das funktioniert nun. Vielen Dank für Deine Hilfe bisher.
So wie ich das sehe, kann ich dieses Array ja nun beliebig erweitern. Ich denke, ich kann auch auf einzelne Inhalte, unabhängig von der funktion mysuccess() zu greifen, ist das richtig?
Nee doch nicht, das Array wird ja oben von $.ajax geholt und sofort an die funktion mysuccess () übergeben. Hmm, würde ungern die getdata.php includen um an die Variablen zu kommen.
Habe mir gedacht, ich könnte einfach mit einem Print-Befehl (oder so ähnlich) den Inhalt aus z.B. data.date[0] ausgeben.
Mal schauen...
 
Ich denke, ich kann auch auf einzelne Inhalte, unabhängig von der funktion mysuccess() zu greifen, ist das richtig?
Das kommt darauf an: Sollen die Informationen ebenso dynamisch jede Sekunde aktualisiert werden, wird es ohne Ajax nicht gehen. Sind es aber zusätzliche statische Informationen, kannst Du diese selbstverständlich beim Laden der Seite mit PHP holen.
 
Oh Mann, bin schon den ganzen Morgen am rumbasteln, aber ich komme nicht dahinter...
Die Schleife scheint nicht durchzulaufen, mir erschließt sich aber nicht, warum das so sein soll.

Hier der Testcode in getdata.php:
Code:
$status = array(0,0,1,0);
$alarm = array("","","Alarm","");
$data = array("status" => $status, "text" => $alarm);
echo json_encode($data);

Hier die Ausgabe bei direktem Aufruf der getdata.php im Browser:
Code:
{"status":[0,0,1,0],"text":["","","Alarm",""]}

Hier das JavaScript:
Code:
<script src="incl/jquery.min.js"></script>
   <script type="text/javascript">
   setInterval(function () {

            $.ajax({
                url: "getdata.php",
                dataType: "json",
                success: mysuccess
            });
        }, 2000);
          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" + (1)).textContent = data.text[i];
                } else {
                    document.getElementById("status" + (i + 1)).src = "0.gif";
                    document.getElementById("text" + (i + 1)).textContent = "Keine Daten";
                }
            }
        }

</script>
Da ist doch nichts falsch, oder?
Beim Aufruf der Seite wird der Text: Keine Daten angezeigt.
Es wird nur bei img id status1 und status 2 das 0.gif geladen.
Bei Status 3 und 4 wird überhaupt kein Bild geladen.
Was kann das sein?
 
Ist dies so gewollt:
document.getElementById("text" + (1)).textContent = data.text[i];
Ich würde dies erwarten:
document.getElementById("text" + (i + 1)).textContent = data.text[i];
 
Oje, ich wieder...
Es scheint so, dass das das Problem ist.
Der Text soll ja immer nur an einem Ort angezeigt werden. Deswegen bleibt die ID immer gleich.
Code:
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("text1").textContent = data.text[i];
                } else {
                    document.getElementById("status" + (i + 1)).src = "0.gif";
                    document.getElementById("text1").textContent = "Keine Daten";
                }
            }
        }
Ich habe es jetzt so geändert, nun scheint es wieder zu funktionieren.
Muss mal weiter versuchen...
 
Komisch, nun zeigt er zwar das 1.gif an aber in der Box steht : Keine Daten.
Auch wenn ich alle 4 Plätze im Array fülle,
Code:
{"status":[0,0,1,0],"text":["Alarm0","Alarm1","Alarm2","Alarm3"]}
funktioniert es nicht.
 
Wenn ich mir den Code ansehe, scheint mir das genau das zu sein, was programmiert ist: Beim letzten Schleifendurchlauf ist der Status 0 und der else-Zweig wird durchlaufen. Dort wird der der Text wieder auf "Keine Daten" gesetzt, obwohl er zuvor auf "Alarm" gesetzt wurde.
Da Du nur ein Textfeld hast, vermute ich mal, Du möchtest eine Sammelmeldung anzeigen, d. h. wenn mindestens ein Status 1 ist, soll ein Text z. B. "Alarm3" angezeigt werden? Dann müsstest Du es so ändern:
Code:
        function mysuccess(data) {

            document.getElementById("text1").textContent = "Keine Daten";
            var text = "";
            for (var i = 0; i < data.status.length; i++) {
                if (data.status[i]) {
                    document.getElementById("status" + (i + 1)).src = "1.gif";
                    text += data.text[i];
                } else {
                    document.getElementById("status" + (i + 1)).src = "0.gif";
                }
            }
            document.getElementById("text1").textContent = text;
        }
Ungetestet, ich hoffe, ich habe dich richtig verstanden.
 
Ja das hast Du. :-)
Ich werde es sofort mal testen.
Habe gerade zum Spass mal die beiden Arrays (status und text) um zwei weitere Pätze erweitert. Nur bei status (0,0,0,0,0,1) wurde auch der korrekte Text angezeigt. Nämlich: Alarm5. Habe alle Variationen einzeln getestet.
 
:-) :-) :-) Jetzt klappt es. Danke Dir!
Jetzt gehts weiter mit der Darstellung der Alarmmeldungen. Ich habe in der Visualisierung eine niedrige div-box dafür vorgesehen. jetzt versuche ich einen vertikalen Lauftext dort einzubauen.
Das wird wohl noch eine Herausforderung.
Auf jeden Fall bin ich jetzt erstmal happy, dass das so funktioniert. Nun kann ich anfangen, die Arrays mit der Datenbankabfrage zu befüllen. Das sollte ich hinbekommen :-) Wegen dem Lauftext oder wenigstens wegen einem Zeilenumbruch für jeden Wert, werde ich sicher noch einmal nerven müssen.
 
Hallo,
wie gesagt hänge ich an dem Zeilenumbruch (Vom vertikalen Lauftext bin ich weg).

Ich weiß, das Steuerzeichen müsste in dieser Variablen-Zuweisung kommen:
Code:
text += data.text[i];
Ich weiß aber nicht, in welcher Form...
+ "<br>" und + \n hab ich schon probiert.
Kann mir jemand helfen? :)
 
Zurück