Textdatei auslesen mit load() - Probleme mit Leerzeichen

  • Hallo zusammen,


    ich habe mir ein Modul geschrieben, für einen SmartMirror (auf Basis von Glancr bzw. MirrOS) und ein kleines Problem, bei dem auslesen einer Textdatei bzw. mit den beinhaltenden Leerzeichen.


    Vorab: Die Textdatei wird inkl. den Leerzeichen über ein Bash-Skript erstellt, was von AVM DECT200 den aktuellen Stromverbrauch abfragt - was auch einwandfrei funktioniert. Es werden zwar insgesamt 4 Zeilen dargestellt, aber nur die erste beinhaltet die Leerzeichen, damit man sofort sieht, wann die letzte Aktualisierung war.


    Die relevante Zeile in dem Bash-Skript mit den Leerzeichen zwischen "W" und "($UHRZEIT)"

    Code
    echo "$switchpower W        ($UHRZEIT)" > /var/www/html/ZEILE1.txt


    -> das gesamte Skript ist hier im Forum unter "abgeschlossene Projekte" (Danke fürs verschieben ;) )


    Der Javascript-Code in einer PHP-Datei:
    [code=php]<script type="text/javascript">$(document).ready(function() { setInterval( function(){ $('#zeile1').load('../ZEILE1.txt'); }, 5000); });</script><span id="zeile1"> </span>[/php]


    Leider werden mir dann im SmartMirror der Abstand zwischen "W" und "($UHRZEIT)" nicht vollständig angezeigt, sondern immer auf 1 Leerzeichen gekürzt. Ich hab leider so gut wie keine Ahnung von Javascript (nur etwas PHP, Java, Python und HTML) und finde mangels Erfahrung&Kenntnisse keine Erklärung für das Verhalten. Das einzige, was ich rausgefunden habe ist, das load() eigentlich veraltet ist und nicht mehr verwendet werden soll. Da aber alles lokal im Netzwerk abläuft, mach ich mir sicherheitstechnisch keine Sorgen..


    Freu mich über jeden Hinweis/Tipp :D


    EDIT: Hab ich vielleicht vergessen zu erwähnen, die Textdatei liegt ebenfalls im Webverzeichnis. Der Browser ruft demnach die Textdatei auf dem Webserver ab.

  • Hallo,


    `load`macht nicht das, was du denkst. Du kannst grundsätzlich nicht mit JS Daten aus dem lokalen Dateisystem laden. Das Blocken die Browser aus Sicherheitsgründen. Schließlich willst du ja nicht, dass irgendeine Webseite auf deine lokalen Daten zugreift.


    Wenn du die Daten also auf der Webseite anzeigen lassen willst, musst du sie von einem Server liefern lassen, denn die Webseite dann (z.B. über einen AJAX-request) periodisch abfragt. Der Webserver kann ja auch lokal laufen. Dafür bietet sich z.B. Python mit Bottle an, dass die mit ein paar Zeilen Code die Daten im JSON-Format liefern kann.


    Gruß, noisefloor

  • Danke für deine Antwort. Ich hab mich vielleicht etwas falsch ausgedrückt (hab den ersten Beitrag editiert). Die Textdatei liegt auch im Webverzeichnis. Insgesamt spielt sich alles auf dem gleichen Raspberry Pi ab: Webserver, Browser und die Textdatei.


    Einzig das Bash-Skript läuft wo anders:

    • verschiedene Werte von unterschiedlichen Geräten werden auf einer NFS-Freigabe "gesammelt"
    • mit einem Bash-Skript wird dann alles ins Webverzeichnis kopiert


    Die lokale Webseite wird durch den Raspberry Pi am Monitor im Vollbildmodus angezeigt und nicht über andere Clients aufgerufen (außer mal was zum testen, o.ä.)

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Ich hab leider so gut wie keine Ahnung von Javascript (nur etwas PHP, Java, Python und HTML)[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]So umfangreich koennen die HTML-Kenntnisse auch nicht sein, denn der beschriebene[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Effekt ist genau das was HTML bei normalem Fliesstext macht.[/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Wenn der Whitespace erhalten bleiben soll dann braucht es ein pre-Element oder etwas CSS.[/font]

  • Danke, das war der entscheidende Hinweis :lol: :lol: :lol:


    Hab gar nicht daran gedacht, dass das an HTML liegt. :danke_ATDE:


    gelöst mit:[code=php]<script type="text/javascript">$(document).ready(function() { setInterval( function(){ $('#zeile1').load('../ZEILE1.txt'); }, 5000); });</script><span id="zeile1" style="white-space: pre;"> </span> [/php]