Uwe Weineck wrote:
Quote:
Wie kann ich eine Zeitabfrage von einem
externen Server (Webserver, Atomuhr - nicht interne Systemzeit)
programmieren? Als Anregung nehme ich dieses Script,
das aber nur die interne Systemzeit abfragt):
--------------- Code Anfang -----------------
html><head |
<http://validator.w3.org/>
Quote:
script type="text/javascript"
function Calendar ( ) |
Methodenbezeichner von Nicht-Konstruktoren sollten nicht mit grossem
Anfangsbuchstaben beginnen. Leerzeichen vor und in leerer Argumentliste
sind unüblich (werden mitunter auch unschön umbrochen):
function calendar()
Quote:
{
var aktuell = new Date();
document.getElementById("zeit").innerHTML = aktuell; |
DOM Level 2 (textContent) und `innerText' (MSHTML, Safari 2) statt
`innerHTML' verwenden, wenn es nur um Klartext geht. Keine solchen
Referenzwürmer züchten, sondern Rückgabewerte in Variablen speichern,
mit if-Anweisung prüfen, und dann die Variablenwerte verwenden.
Quote:
window.setTimeout ('Calendar ( )',1000); |
Ein Feature-Test auf `window.setTimeout' kann vorher nicht schaden.
Wenistens `if (window.setTimeout)' sollte es sein; besser: isMethod(),
siehe Google.
Quote:
}
/script
/head
body onload="Calendar ( )" |
Üblich ist es auch, in diesem Fall keine Leerzeichen im Script-Quelltext zu
schreiben.
<body onload="Calendar()">
Zum grossen Zeh siehe oben ;-)
Quote:
font size=7><p id='zeit'>Hier erscheint Inhalt des Objekts Date (
)</p></font> </body></html |
Das FONT-Element ist seit fast 10 Jahren zugunsten von CSS deprecated
(missbilligt, mit erweiterter Bedeutung). <font ...><p ...>...</p></font>
ist zudem ungültig; das FONT-Element ist ein Inline-Element, P ein Block-
Element. FONT einfach weglassen und das P mit CSS formatieren (wenn's denn
sein muss).
Quote:
---------------Code Ende ----------------
Wie man bei Ausf�hrung sieht, wird die Systemzeit aus dem
Objekt "Date( )" jede Sekunde neu initialisiert [ ...= new Date( ) ]
und der variablen "aktuell" zugewiesen, was an der
fortlaufenden Sekundenanzeige beobachtet werden kann.
Beim Erstellen eines eigenen Objekts oder Funktion, die
die nicht die Systemzeit, sondern eine externe Serverzeit
oder Atomzeit abfragen soll, erhalte ich aber entweder
nur eine **stehende, sich nicht ver�ndernde Zeitanzeige** oder die |
Deine Umlaute sind nicht deklariert und man sieht hier deshalb an diesen
Stellen nur Fragezeichen. Bitte erspar Deinen Lesern (und deren Programmen)
die Ratespiele (es gibt nicht nur Windows-1252) und stell Dein Programm
richtig ein:
<http://oe-faq.de/>
Quote:
Ausgabe "[object Object]" bzw. "undefined". |
Zumindest ersteres sollte Dich nicht wundern. Du versuchst ein Objekt als
Zeichenfolge anzuzeigen, daher wird die String-Repräsentation des Objekts
angezeigt.
Quote:
Beisp.: Das Script soll z.B. eine Webserverzeit
mittels PHP Code abfragen:
var aktuell = "<? echo date('H:i:s d.m.Y') ?>"; |
Besser:
var aktuell = "<?php echo date('H:i:s d.m.Y'); ?>";
Quote:
Wie generiere ich nun ein Objekt bzw. eine
Funktion "ExterneServerzeit" *mit*
bewegter Sekundenanzeige ,
^^^^^^^^^^^^^^^^^^^^^^^^
|
Mal ganz grundsätzlich: Das will auf einer Website wirklich niemand sehen.
(Wer wissen will, wie spät es ist, guckt auf die Uhr in der Statusleiste,
auf dem Mobiltelefon, an der Wand -- oder sogar am Unterarm!

) Du willst
das auf einer Webiste auch gar nicht machen, denn das Geticke lenkt den
Besucher ständig von Deinen Inhalten ab (es sei denn, Hauptinhalt ist die
Uhr, aber das wäre vermutlich eine ziemlich langweilige Website, bei der man
ganz schnell weitersurft).
Unabhängig davon hast Du IMHO zwei Möglichkeiten, das zu realisieren:
a) Serverzeit einmal ermitteln, in einem Date-Objekt speichern und aktuelle
Zeit unter Berücksichtigung vom Client-Offset regelmässig ermitteln.
Geringe Netzwerk- und Serverlast; relativ zuverlässig, aber mitunter
etwas ungenau.
b) Serverzeit per HTTP-Request regelmässig ermitteln. Das hat Martin Dir
inzwischen schon vorgeschlagen. (Meinen Artikel zu schreiben
dauerte etwas länger.)
Hohe Netzwerk- und Serverlast; relativ unzuverlässig (bricht die
Verbindung ab oder kommt gar nicht zustande, bleibt die Uhr bestenfalls
stehen). Aber wenn's funktioniert, ist es relativ genau.
<https://developer.mozilla.org/en/AJAX>
Quote:
und wie/wo plaziere ich sie? |
Depends.
Quote:
Etwa so? : (In Zeile 5):
(...)
var aktuell = new ExterneServerzeit ( );
(...) |
Kann man machen. *Ein* Objekt reicht aber dafür, z.B. (Möglichkeit a):
var clock = {
serverStart: new Date(<?php echo date('...'); ?>).getTime(),
clientStart: new Date().getTime(),
time: new Date(),
getTime: function() {
this.time.setTime(this.serverStart + (new Date() - this.clientStart));
return this.time;
},
strftime: function(t) {
return ...;
}
update: function() {
... this.strftime(this.getTime()) ...
var me = this;
window.setTimeout(function()( me.update(); }, 1000);
},
start: function() {
this.update();
}
stop: function() {
window.clearTimeout(...);
}
};
<body onload="clock.start();" onunload="clock.stop()">
IIRC hat hier vor einiger Zeit schon mal jemand eine Lösung gepostet,
(leider in letzter Zeit nur) möglicherweise mit Google Groups auffindbar:
<http://dcljs.de/>
Ja.
PointedEars