rklose: SSI mit setTimeout

Hallo,

es gibt zahllose Scriptbeispiele wie mit Hilfe von setTimeout() z.B. aktualisierte Bilder auf einer Seite neu dargestellt werden. Zum Beispiel für Webcams.

Dazu wird üblicherweise ein ähnliches Konstruct wie document.images["bild"].src = imgsrc; eingesetzt. Das funktioniert auch sehr gut.

Nun benötige ich aber eine Variable die direkt auf dem Server liegt, die aktualisiert werden soll.

Die Darstellung mit document.getElementByID('ID').innerhtml=z;

klappt grundsätzlich. z wird mit var z="<!--#include virtual='/server/variable' -->" geholt. Nur wird seltsamerweise dieser Wert nicht durch das setTimeout() aktualisiert.
Wenn ich an gleicher Stelle der z Variable z.B. mit 'new Date()' eine aktuelle Zeitinformation gebe, klappt das wunderbar. Das gleiche mit dem SSI "#echo var='DATE_LOCAL'" reagiert wie bei der Variablen. Nämlich gar nicht.

Ich kann es nur durch ein <meta http-equiv="refresh" ... > aktualisieren.

Ist es grundsätzlich nicht möglich über setTimeout() Variablen die mit SSI eingelesen werden zu aktualisieren? Oder mache ich da noch einen anderen Denkfehler. Bin ich sowohl mit Javascript wie auch mit SSI auf dem falschen Weg.

Ich möchte eine Variable, die in '/server/variable' steckt alle 10 Sekunden aktualisieren lassen ohne die ganze Website neu aufbauen zu müssen.

frdl. Gruß
Roland

  1. Hi,

    Die Darstellung mit document.getElementByID('ID').innerhtml=z;

    klappt grundsätzlich. z wird mit var z="<!--#include virtual='/server/variable' -->" geholt. Nur wird seltsamerweise dieser Wert nicht durch das setTimeout() aktualisiert.

    Warum sollte er?

    Wenn du einen (neuen) Wert vom Server holen willst, musst du einen HTTP-Request machen.

    Wenn ich an gleicher Stelle der z Variable z.B. mit 'new Date()' eine aktuelle Zeitinformation gebe, klappt das wunderbar. Das gleiche mit dem SSI "#echo var='DATE_LOCAL'" reagiert wie bei der Variablen. Nämlich gar nicht.

    Ebenso logisch.

    Ist es grundsätzlich nicht möglich über setTimeout() Variablen die mit SSI eingelesen werden zu aktualisieren?

    setTimeout ruft nur eine Funktion zu einem bestimmten Zeitpunkt auf.
    Selbstverständlich ändert das nicht den Wert irgendwelcher Variablen, die genau ein mal definiert und danach nicht mehr geändert werden.

    Ich möchte eine Variable, die in '/server/variable' steckt alle 10 Sekunden aktualisieren lassen ohne die ganze Website neu aufbauen zu müssen.

    Hinter welchem Mond hast du bisher gelebt, wenn dir das Stichwort AJAX noch nicht begegnet ist ...?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Ich möchte eine Variable, die in '/server/variable' steckt alle 10 Sekunden aktualisieren lassen ohne die ganze Website neu aufbauen zu müssen.

      Hinter welchem Mond hast du bisher gelebt, wenn dir das Stichwort AJAX noch nicht begegnet ist ...?

      MfG ChrisB

      Hallo Chris,

      nein, das Stichwort AJAX hat mir in diesem Zusammenhang bisher noch nichts gesagt. Das hat aber wahrscheinlich damit zu tun, das ich meine bisherigen einfachen Seitenerstellungen locker im Texteditor zusammenstellen konnte, weil es nicht nötig war dynamische Inhalte zu generieren. Aber es ist schön, das es Leser wie Dich gibt, die sich damit professionell auskennen.

      Damit hattest Du meine letzten Zweifel, das ich mich da auf dem Holzweg befunden habe, genommen.
      Schade, ich hatte erwartet, das man etwas, was man auf Bildebene hinbekommt, auf Textebene ähnlich lösen könnte.

      Vielen Dank für den Hinweis
      Roland

  2. Ich möchte eine Variable, die in '/server/variable' steckt alle 10 Sekunden aktualisieren lassen ohne die ganze Website neu aufbauen zu müssen.

    SSI ist ein Präprozessor, der serverseitig ausgeführt wird und letztlich statischen Code ausspuckt. Der Webserver liest die Datei ein, findet SSI-Anweisungen und ersetzt diese durch deren Ausgabe. Man kann mit SSI also HTML (oder eben JavaScript) erzeugen.

    PHP und andere serverseitigen Sprachen funktionieren genauso. Diese Programme werden auf dem Server ausgeführt, wenn eine Anfrage hereinkommt. Sie generieren dann irgendeine Ausgabe und beenden sich. Danach wird die Ausgabe an den Browser geschickt. Der bekommt kein SSI, PHP usw. zu Gesicht.

    Der Browser bekommt lediglich das statische Resultat zugeschickt. Wenn du var z = "<!--#include virtual='/server/variable' -->"; notierst, dann hat z immer den Wert, den es zum Zeitpunkt der Ausführung des SSI-Codes auf dem Server hatte, bevor der Code überhaupt zum Browser geschickt wurde. Schau mal in den generierten Quellcode, den der Browser bekommt! Dieser ist maßgeblich. Da steht einfach ein fester String. Aus der obigen Anweisung wird beispielsweise var z = "irgendwas". Wenn du diese JavaScript-Anweisung nun mehrfach ausführst, klar, dann wird nichts erneut vom Server geladen, sondern z hat immer denselben Wert.

    Was du suchst ist XMLHttpRequest. Siehe auch Stefan Münz’ Ajax-Tutorial sowie http://molily.de/js/ajax.html.
    setTimeout kannst du weiterhin verwenden. Allerdings erzeugst du regelmäßig einen XMLHttpRequest und lädst dir damit Daten vom Server. Diese kannst du dann in der Variable speichern.

    Grüße, Mathias

    1. Was du suchst ist XMLHttpRequest. Siehe auch Stefan Münz’ Ajax-Tutorial sowie http://molily.de/js/ajax.html.
      setTimeout kannst du weiterhin verwenden. Allerdings erzeugst du regelmäßig einen XMLHttpRequest und lädst dir damit Daten vom Server. Diese kannst du dann in der Variable speichern.

      Hallo Matthias,

      vielen Dank für den Hinweis.

      Ich werde es testen.

      Roland

    2. Was du suchst ist XMLHttpRequest.

      Genau das war es. Es funktioniert, wie ich es sein soll.

      Vielen Dank noch einmal

      Gruß
      Roland