Variabeln aktualisieren ohne 'location.reload()'

Harryyy

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem:
auf der Wetter-Homepage www.wetter-wehr.de/harry.htm sollen die aktuellen Wetterdaten jede Minute neu geladen werden. Die aktuellen Daten werden permanent per FTP in eine 'Daten.js' Datei geschrieben, und momentan mit 'location.reload()' auch neu geladen. Das funktioniert problemlos, aber das Geflacker beim Screenaufbau geht mir auf die Nerven.

Ich hab nun eine Funktion geschrieben, die die Werte einzeln aktualisiert und hab nun logischerweise das Problem, dass dabei die neuen Daten aus 'Daten.js' ausgelesen werden.

Wie kann ich also die Daten aus 'Daten.js' lesen, ohne einen reload der ganzen Page durchzuführen?

Die Datei 'Daten.js' sieht wie folgt aus:
Code:
  var sDatum = "21.12.2004"
  var sUhrzeit = "11:32"
  var sTemperatur = "1,0"
  var sLuftfeuchte = "64"
  var sLuftdruck = "1024,0"
  ...

Danke im Voraus, Harry
 
Schlicht und einfnach: Gar nicht.

Du müsstes dazu mit JavaScript lesezugriff auf Dateien auf einem anderen Sver haben und das ist schlicht nicht zu bewerkstelligen.

Ich habe allerding mal eine Lösung über Cookies gesehen, weiß aber nicht mehr so ganz wie das ging. Die Lösung würde aber soweiso daran scheitern, dass du auf die js-Datei auf dem Wetter-Server keine Verfügung hast. Warum reicht dir nicht einfach ein statisches Wetter das nur bei Reload der Seite aktualisiert wird? So schnell ändert sich das Wetter ja nicht. Der User bleibt ja keine 2 Stunden auf deiner Seite ohne zu reloaden...
 
Zuletzt bearbeitet:
Nun ja.... es geht schon.

Die folgende Methode haut hin in IE,Geckos und Opera(in Konqueror nicht, andere hab ich nicht probiert)

Man erzeugt ein neues Skript-Element. Diesem weist man als src-Attribut die Adresse des besagten Skriptes zu. Damit dies auch wirklich neu geladen wird, hängt man nen Timestamp an die Adresse ran.
Dann hängt man diesen Knoten in das Dokument ein.... fertig.

Dass das Skript wirklich neu geladen wird, könnt ihr hier beobachten.

(Das Javascript, was da neu geladen wird, ist eigentlich ein PHP-Skript, welches den tutorials.de-RSS-Feed ausliest und den entsprechenden JS-Code ausgibt)

Wenns funktioniert, sollten da im Minutentakt die aktuellsten 20 Themen erscheinen...ohne die Seite selbst zu reloaden.

Der PHP-Code für das Skript, welches dieJS-Datei ausliefert:

Code:
<?php
header("content-type:text/javascript");

    function sc_ret($str)
    {
        $str=str_replace('&amp;amp;','&',$str);
        $tt = get_html_translation_table(HTML_ENTITIES);
        $tt = array_flip($tt);
        return strtr($str,$tt);
    }

$rss=file_get_contents('http://www.tutorials.de/external2.php?limit=20&orderby=lastpost');

preg_match_all('@<item>\s*<title>(.*)</title>\s*<link>(.*)</link>\s*<description><!\[CDATA\[(Forum:[^\r\n]+)[\r\n]+.*</item>@Us',$rss,$rss,PREG_SET_ORDER);


foreach($rss as $k => $v)
    {
        echo "\n".'if(document.getElementsByTagName("A").length<'.($k+1).')
                    {
                        div     = document.createElement("DIV");
                        space   = document.createTextNode("-");
                        space2   = document.createTextNode("-");
                        link    = document.createElement("A");
                        link.appendChild(space2);
                        link.setAttribute("target","popper");
                        div.appendChild(space);
                        div.appendChild(link);
                        document.getElementsByTagName("body")[0].appendChild(div);
                    }
                    
                    document.getElementsByTagName("DIV")['.$k.'].firstChild.data="'.addcslashes(sc_ret($v[3]),'"').': ";
                    document.getElementsByTagName("A")['.$k.'].firstChild.data="'.addcslashes(sc_ret($v[1]),'"').'";
                    document.getElementsByTagName("A")['.$k.'].setAttribute("href","'.$v[2].'");';
    }
?>
 
Hallo Sven,
interesante Sache, aber bei mir funktioniert das nicht (IE), Fehler bringt er aber auch keinen. hier ist die Seite ...
Alle 3 Minuten kommen neue Daten in die JS-Dateien, mit dem Button [><] kann man es von Hand auslösen (dann steht 'x' mit drin). Mit F5 macht er es natürlich.

Die Aufrufe habe ich wie folgt reingesetzt:
Code:
<SCRIPT LANGUAGE=JavaScript1.1 SRC="http://www.wetter-wehr.de/wetterdaten.js"></SCRIPT>
<SCRIPT LANGUAGE=JavaScript1.1 SRC="http://www.wetter-wehr.de/para/wetterdaten_para.js"></SCRIPT>
<SCRIPT LANGUAGE=JavaScript1.1 SRC="datenInTabelle_neu.js"></SCRIPT>

<script language="JavaScript">
<!--
function neueDaten()
{
	skript1 = document.createElement('SCRIPT');
	skript1.setAttribute('src', 'http://www.wetter-wehr.de/wetterdaten.js');
	document.getElementsByTagName('BODY')[0].appendChild(skript1);
	skript2 = document.createElement('SCRIPT');
	skript2.setAttribute('src', 'http://www.wetter-wehr.de/para/wetterdaten_para.js');
	document.getElementsByTagName('BODY')[0].appendChild(skript2);
	skript3 = document.createElement('SCRIPT');
	skript3.setAttribute('src', 'datenInTabelle_neu.js');
	document.getElementsByTagName('BODY')[0].appendChild(skript3);
	
//  ab hier werden die Textfelder neu ausgegeben
 
Bei mir funktioniert das auf deiner Seite....die Daten werden automatisch geändert(ich hab jetzt allerdings nicht geschaut, ob du irgendwo noch die ganze Seite reloadest).

Problem 1
Damit dies auch wirklich neu geladen wird, hängt man nen Timestamp an die Adresse ran.
...das fehlt bei dir. Je nach Caching-Einstellung des Browsers kann dies bedeuten, dass er nicht die aktuellen Skripte lädt, sondern sie aus dem Cache holt.

Problem 2: die Daten sind im Zweifelsfall 3 Minuten älter.
Der Browser brauch ein wenig Zeit, um die Skripte zu laden... du greifst aber sofort darauf zu.
Gebe dem Skript ein wenig Zeit, bis es die neuen Daten einträgt.
Der Browser braucht natürlich ein wenig Zeit, um
 
Ich hab jetzt folgendes gemacht:
- den Interval deaktiviert (war vorher drin)
- aktiviere es über den Button
- dann werden die 2 JS-Dateien neu geladen und per Timeout() die Ausgabe nach 5 Sekunden gestartet (eine Nr. wird in der Ausgabe hochgezählt)

Zum Testen ändere ich über FTP die Werte in der JS-Datei, Klick auf den Button [> <], dann sollte er nach 5 Sekunden den neuen Wert anzeigen - aber nix ändert sich außer der laufenden Nummer.

Vielleicht hab ich irgend 'ne Kleinigkeit übersehen, oder es geht so doch nicht
 
Harryyy hat gesagt.:
Vielleicht hab ich irgend 'ne Kleinigkeit übersehen, oder es geht so doch nicht
Naja...meinen Hinweis auf den Timestamp versuchst du zumindest beharrlich zu ignorieren:-)

Ich hab dein Skript mal adoptiert.... und die Daten werden aktualisiert--> http://doktormolle.de/temp/wetter.htm (immer wenn die Überschrift rot wird, wird das neue Skript geladen... wenn sie wieder weiss wird, werden die neuen Daten eingelesen).

Ich hab das mit IE, Mozilla und Opera gleichzeitig probiert... alle übernehmen die neuen Daten.

Allerdings haut eines nicht hin... der FTP-Upload scheint (zumindest momentan) nicht alle 3 Minuten zu erfolgen, sondern eher alle 10 Minuten.
 
Hallo Sven,
muss doch grade mal ein Dankschreiben aufsetzen, denn das updaten funktuiniert nun prima.
Wo wären wir blos ohne solch klugen Köpfe die sich auch nicht scheuen, sich in den Dienst anderer zu stellen. Danke für deinen Einsatz an Zeit und Gehirnschmalz, meiner hat dazu ja nicht ausgereicht. :p
 
sally,

Hab zu diesem skript noch eine Frage. Kann man auch nur Beiträge von bestimmten Foren anzeigen lassen?
Gewünscht wären da die Beiträge aus den Forn PHP,HTML und Javascript.
geht das?

mb fanste
 
Zurück