HighDots Forums  

Probleme mit Objekterzeugung

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Probleme mit Objekterzeugung in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Uwe Weineck
 
Posts: n/a

Default Probleme mit Objekterzeugung - 10-19-2009 , 09:16 AM






Ich programmiere nicht oft mit JavaScript,
daher hier eine etwas "unbeholfene" Frage:

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>
<script type="text/javascript">
function Calendar ( )
{
var aktuell = new Date();
document.getElementById("zeit").innerHTML = aktuell;
window.setTimeout ('Calendar ( )',1000);
}
</script>
</head>
<body onload="Calendar ( )">
<font size=7><p id='zeit'>Hier erscheint Inhalt des Objekts Date ( )</p></font>
</body></html>
---------------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
Ausgabe "[object Object]" bzw. "undefined".
Beisp.: Das Script soll z.B. eine Webserverzeit
mittels PHP Code abfragen:

var aktuell = "<? echo date('H:i:s d.m.Y') ?>";

Wie generiere ich nun ein Objekt bzw. eine
Funktion "ExterneServerzeit" *mit*
bewegter Sekundenanzeige , und wie/wo plaziere ich sie?
Etwa so? : (In Zeile 5):
(...)
var aktuell = new ExterneServerzeit ( );
(...)

Weiss jemand Rat?

Gruss Uwe

Reply With Quote
  #2  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Probleme mit Objekterzeugung - 10-19-2009 , 01:15 PM






Uwe Weineck wrote:

Quote:
Wie kann ich eine Zeitabfrage von einem
externen Server (Webserver, Atomuhr - nicht interne Systemzeit)
programmieren?
Siehe
https://developer.mozilla.org/En/Using_XMLHttpRequest
insbesondere "asnynchronous request".
Beachte die "same origin policy", Script in einem Dokument, das von
http://example.com/ geladen wurde, kann nur an example.com Anfragen
senden, nicht aber an example.org.

--

Martin Honnen
http://msmvps.com/blogs/martin_honnen/

Reply With Quote
  #3  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Probleme mit Objekterzeugung - 10-19-2009 , 03:52 PM



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/>

Quote:
Weiss jemand Rat?
Ja.


PointedEars

Reply With Quote
  #4  
Old   
Uwe Weineck
 
Posts: n/a

Default Re: Probleme mit Objekterzeugung - 10-19-2009 , 08:43 PM



"Thomas 'PointedEars' Lahn" <PointedEars (AT) web (DOT) de> schrieb:

Quote:
Uwe Weineck wrote:
(...)

["Tickende" Uhr]
Quote:
Mal ganz grundsätzlich: Das will auf einer Website wirklich niemand sehen.
Sollte auch so nicht realisiert werden (aber ist z.B. als "Umschalter" gedacht , der
um eine bestimmte Zeit ein Ereignis auslöst, ohne die Webseite
neu zu laden

Quote:
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.
Ich werde das in Ruhe weiterprobieren. (Ein anderer
"Nicht-programmier"-Job wartet erstmal auf mich).An dieser Stelle
erstmal Dank an beide für Antworten und auch die Ratschläge
(die Fremdzeichen sollten jetzt weg sein (?): ;-) äöüAÖÜß

Gruss Uwe

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.