Seite 1 von 4 1234 LetzteLetzte
Ergebnis 1 bis 15 von 47
  1. #1
    j-l-n Guest

    [Ajax] einfache Uhr mit serverseitiger Zeit

    Eine serverseitige Uhrzeitanzeige hat den Vorteil, dass alle User die selbe Uhrzeit sehen und nicht - ihre evtl. auch noch falsche - Systemzeit.
    Unser Skript auf Serverseite sieht folgendermaßen aus:
    PHP-Code:
    /*
    im Bsp. verwendeter Dateiname: servertime.php
    */

    $timestamp time();

    //Monatsnamen als Array
    $monat_name = array(
       
    "01" => "Januar",
       
    "02" => "Februar",
       
    "03" => "März",
       
    "04" => "April",
       
    "05" => "Mai",
       
    "06" => "Juni",
       
    "07" => "Juli",
       
    "08" => "August",
       
    "09" => "September",
       
    "10" => "Oktober",
       
    "11" => "November",
       
    "12" => "Dezember"
    );

    //Namen der Wochentage als Array
    $wochentag_name = array(
       
    "Sonntag",
       
    "Montag",
       
    "Dienstag",
       
    "Mittwoch",
       
    "Donnerstag",
       
    "Freitag",
       
    "Samstag"
    );


    //Variablen festlegen

    $jahr date("Y"$timestamp);
    $monat date("m"$timestamp);
    $tag date("d"$timestamp);
    $wochentag date("w"$timestamp);
    $uhrzeit date("G:i"$timestamp);
    $sekunden date("s"$timestamp);

    //Namen aus Array auslesen und ersetzen
    $monat $monat_name[$monat];
    $wochentag $wochentag_name[$wochentag];


    //gesamtes Datum + Uhrzeit zusammenbauen

    $uhr "$wochentag$tag$monat $jahr<br>$uhrzeit:$sekunden Uhr";

    echo
    "$uhr"
    Nicht vergessen dürfen wir natürlich, auch die dt. Zeit einzustellen - dies ist oft nicht der Fall...
    PHP-Code:
    //Serverzeit: dt. Zeitzone
    ini_set('date.timezone''Europe/Berlin'); 
    Kommen wir nun zum clientseitigen Teil:
    Hier benötigen wir zuerst
    HTML-Code:
    <div id="uhrzeit">
    ,in den dann mittels .innerHTML die Uhrzeit geschrieben wird.

    Das Laden per Ajax sieht dann so aus:
    Code:
    function uhrzeit() {
    
     var http = AjaxObject();
     function AjaxObject(){
     //unterschiedliche Ajax-Methoden für z.B. Internet Explorer
    
       if(window.XMLHttpRequest) {
       return new XMLHttpRequest();
       }
       else if(window.ActiveXObject) {
       //wenn Internet Explorer, der Ajax über ActiveX realisiert
       return new ActiveXObject("Microsoft.XMLHTTP");
       }
       else{ //wenn Ajax nicht unterstützt
       alert("FEHLER: Verwendeter Browser unterstützt die AJAX-Technik nicht!");
       }
     }
    
     //Pfad zum PHP-Skript
     http.open("GET", "servertime.php", true);
     http.onreadystatechange=function() {
    
       if(http.readyState == 4) {
       document.getElementById("uhr").innerHTML = http.responseText;
       //ID des HTML-Elements, in dem die Ausgabe erfolgen soll, im Bsp. "uhr"
       }
    
     }
    
     http.send(null);
     window.setTimeout("uhrzeit()", 1000);
    
    }

    Livedemo: AJAX-Uhr (.../uhr.srf)

    Wie immer bin ich offen für Anregungen, konstruktive Kritik und Verbesserungsvorschläge!

    PS: Ich war mir nicht ganz sicher, ob das in Tutorials JS oder PHP gehört - falls nötig, bitte einfach verschieben!
    Ach ja, was mir gerade aufgefallen ist: in der Beschreibung vom "Tutorials JavaScript" ist ein Rechtschreibfehler

  2. #2
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.801

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Das ganze mit jQuery: [jQuery] Optimaler Ajax-Request

    Julian, einen neuen Request sollte man erst auf die Schiene schieben, wenn der alte garantiert beendet ist. Das kann sonst schnell zu Problemen bis hin zu Browserabstürzen führen. Also dein window.setTimeout() immer in den success und error Zweig, nicht übergreifend.
    Geändert von mikdoe (05-02-2014 um 09:42 Uhr)

  3. #3
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.751

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Die Systemzeit kann falsch eingestellt sein, aber eine Sekunde sollte trotzdem eine Sekunde sein.

    Deswegen könnte man die Anzahl der HTTP-Requests deutlich reduzieren, wenn man die Serverzeit mit der lokalen Zeit vergleicht und die Differenz als Korrekturoffset speichert. Dann kann man jede Sekunde die lokale Zeit abrufen, entsprechend korrigieren und dann anzeigen. Den Server würde ich dann immer nur zur vollen Stunde kontaktieren (um z.B. verschiedene Einstellungen zur Sommer-/Winterzeit zu kompensieren).

    Das wäre dann eine Einsparung von 3599 Requests.

  4. #4
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von mikdoe Beitrag anzeigen
    Also dein window.setTimeout() immer in den success und error Zweig, nicht übergreifend.
    Wo dann genau? Denn den status:error (dachte ich) gibt es nur bei jQuery...

  5. #5
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von kkapsner Beitrag anzeigen
    Deswegen könnte man die Anzahl der HTTP-Requests deutlich reduzieren, wenn man die Serverzeit mit der lokalen Zeit vergleicht und die Differenz als Korrekturoffset speichert. Dann kann man jede Sekunde die lokale Zeit abrufen, entsprechend korrigieren und dann anzeigen.
    Das wäre auch eine Überlegung wert - wie du sagtest würde man sich viele Reuqests sparen.

  6. #6
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.801

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von Julian Beitrag anzeigen
    Wo dann genau? Denn den status:error (dachte ich) gibt es nur bei jQuery...
    Dein succes Zweig ist der mit http.readyState == 4
    error Zweig musst du noch einbauen.
    Ich würde es nicht ohne jQuery machen.

  7. #7
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von mikdoe Beitrag anzeigen
    Dein succes Zweig ist der mit http.readyState == 4
    error Zweig musst du noch einbauen.
    Ich würde es nicht ohne jQuery machen.
    Dann könnte ich es doch auf
    Code:
    if(http.readyState == 4 && http.status == 200) {
    erweitern und dann über else gehen, oder?
    Geändert von j-l-n (05-02-2014 um 21:57 Uhr) Grund: kleiner Fehler berichtigt (== vergessen)

  8. #8
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.801

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Nein, else geht nicht, weil der Status während des Requests von 0 auf 4 hochwechselt. Ein else würde den ganzen Request spätestens bei 1 abbrechen.

  9. #9
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von mikdoe Beitrag anzeigen
    Nein, else geht nicht, weil der Status während des Requests von 0 auf 4 hochwechselt. Ein else würde den ganzen Request spätestens bei 1 abbrechen.
    Stimmt - Denkfehler.

  10. #10
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.751

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    .readyState === 4 heißt nicht, dass der Request erfolgreich war, sondern nur, dass er beendet wurde. Der Statuscode gibt an, ob alles glatt gelaufen ist.

    So gesehen sind sowohl success, als auch error schon mit dem Code oben abgedeckt.

  11. #11
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von kkapsner Beitrag anzeigen
    .readyState === 4 heißt nicht, dass der Request erfolgreich war, sondern nur, dass er beendet wurde. Der Statuscode gibt an, ob alles glatt gelaufen ist.
    Also dann so:
    Code:
    if(http.readyState == 4 && http.status == 200) {
    //entspricht status:success
    }
    else if(http.readyState == 4 && http.status != 200) {
    //ERROR (z.B. HTTP 500)
    }

  12. #12
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.801

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Was ich meinte war, dass man auf if(http.readyState == 4 && http.status = 200) nicht einfach ein else schreiben kann. Man muss readyState von status getrennt abfragen, also wenn überhaupt dann else if status != 200, um den error Zweig zu schreiben. Einfach nur else reicht nicht, weil das bei readyState == 0 auch zutreffen würde.
    Oder meinst du was anderes, Korbinian?

    Julian, wir waren wieder gleichzeitig
    Ich glaube, so kannst du es machen. Weil der status glaube ich eh erst bei 4 geliefert wird.

  13. #13
    j-l-n Guest

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    klar, damit hattest du natürlich Recht - ich wusste auch, was du gemeint hattest
    Ich hab ja bloß selber den Denkfehler gemacht gehabt - aber jetzt im letzten Post berichtigt (mit else if).

    Und schon wieder ein gleichzeitiger Post und außerdem mal wieder schneller geändert, als ich schreibe

  14. #14
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Schau mal hier Textdatei zyklisch mit Ajax einlesen ([js]Textdatei zyklisch mit Ajax einlesen) rein. Ist damals ausgiebig diskutiert und getestet worden.

    LG jspit

  15. #15
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.801

    AW: [Ajax] einfache Uhr mit serverseitiger Zeit

    Zitat Zitat von kkapsner Beitrag anzeigen
    Deswegen könnte man die Anzahl der HTTP-Requests deutlich reduzieren, wenn man die Serverzeit mit der lokalen Zeit vergleicht und die Differenz als Korrekturoffset speichert.
    Wie sähe das dann praktisch aus?
    Ich meine mich zu erinnern, dass du irgendwo mal gesagt hast, dass der setTimeout() nur näherungsweise richtig geht. Wenn ich also alle 60 Sekunden die Zeit anzeige, ist das ja garnicht alle 60 Sekunden sondern vielleicht alle nur alle 65 Sekunden, das heißt, irgendwann fängt die Uhr an zu hängen.
    Wie würdest du da vorgehen?

Seite 1 von 4 1234 LetzteLetzte

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 17-08-2012, 14:19
  2. serverseitiger Aufruf einer JS-Funtion
    Von Daktari im Forum JavaScript
    Antworten: 8
    Letzter Beitrag: 29-02-2012, 00:58
  3. AJAX Request Zeit
    Von aazmitia im Forum Serverseitige Programmierung
    Antworten: 4
    Letzter Beitrag: 14-07-2008, 12:03
  4. ! Einfache Blätterunktion!!
    Von Iceman8712 im Forum Serverseitige Programmierung
    Antworten: 17
    Letzter Beitrag: 24-08-2005, 18:46
  5. aus Unix zeit normale zeit
    Von MasterD im Forum Serverseitige Programmierung
    Antworten: 1
    Letzter Beitrag: 24-04-2001, 10:07

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •