PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion nach 1 sek wieder aufrufen


lukgestach
20.04.2008, 18:45:34
Hallo zusammen

Ich habe eine Funktion die ich nach einer Sekunde wieder aufrufen will, da ich eine gewisse Zeit herunterzählen will.
Ich habe nun folgende Funktion erstellt:

function count ()
{
aktuell = new Date();
zeit = (endzeit - aktuell) /1000;
zeit = Math.round(zeit);
if(zeit > 0)
{
alert(aktuell);
m = zeit / 60;
s = zeit % 60;
h = m / 60;
h = Math.floor(h);
m = Math.floor(m);
}
else
location.href = "verteidigung.php?anzahl=" + anzahl + "&typ=" + typ + "&id= " + id;
document.write(h+':'+m+':'+s);
setTimeout('count()', 1000);
}
Die Funktion rufe ich mit PHP folgendermassen auf:

$ende = date("Y,m,d,H,i,s", $dsatz["start"]);
echo "<script type=\"text/javascript\">
endzeit = new Date($ende);
count();</script>";
seht ihr gerade was ich falsch mache? Es sollte ja die Stunden:Minuten:Sekunden im diesem Format ausgeben: H:i:s hh:mm:ss, aber irgendwie gibt es dreistellige stundenzahlen mit komma usw. aus. und wenn dann die einte Sek abgelaufen ist von setTimeout, dann lädt es einfach die Seite neu, aber ohne irgendetwas. also einfach eine weisse seite mit den genau gleichen zahlen.
Ich habe gestern schon herumgebastelt bin aber auf keine Lösung gekommen.

Gruss Lukas

Franzx
20.04.2008, 19:15:33
Bin mir nicht ganz sicher, aber
pack doch window.setTimeout("count()", 1000); außerhalb der {} Klammer vor das </script>

Aufrufen würde ich dies per ONLOAD im BODY-Tag, nicht per extra Script, mal abgesehen davon müßte es eigentlich auch schon funktionieren nur

window.setTimeout("count()", 1000); direkt per ONLOAD im BODY-Tag aufzurufen.

<body onload="window.setTimeout("count()", 1000);">

lukgestach
20.04.2008, 19:50:26
Hallo,

danke für deine Antwort. Ich rufe das setTimeout extra in der If Anweisung auf, da die Funktion nicht weiter aufgerufen werden muss sobald zeit = 0 ist! Dann geht es in den else block und ruft die Seite mit GET daten neu auf!
auch mit window.setTimeout wird eine leere seite aufgerufen. die function count ist danach nicht mehr verfügbar :(. ich stehe auf dem Schlauch, denn endzeit - aktuell sollte in diesem Falle unter 15min geben, aber es gibt um die 700 irgendetwas stunden, das finde ich nicht ganz normal.

Gruss Lukas

Area51
21.04.2008, 06:10:46
Vielleicht hilft das so:

function count ()
{
aktuell = new Date();
zeit = (endzeit - aktuell) /1000;
zeit = Math.round(zeit);
if(zeit > 0)
{
alert(aktuell);
m = zeit / 60;
s = zeit % 60;
h = m / 60;
h = Math.floor(h);
m = Math.floor(m);
}
else
{
location.href = "verteidigung.php?anzahl=" + anzahl + "&typ=" + typ + "&id= " + id;
document.write(h+':'+m+':'+s);
setTimeout('count()', 1000);
}
}

lukgestach
21.04.2008, 17:03:00
ne, das ist es auch nicht, das setTimeout und document.write ist extra im IF und nicht im ELSE Block!
Ich schildere das Problem sonst nochmals: Ich habe eine Funktion in js, welche ich mit php aufrufe. Bis hier klappt alles bestens!
Und dann wird in der js Funtkion die Variable endzeit minus aktuell gerechnet. endzeit ist eine Zeit welche in einer MySQL DB gespeichert ist und aktuell ist new Date().
Bei dieser Berechnung werden ja die Millisekunden gerechnet und deshalb teile ich das resultat noch durch 1000. Aber es wird eine viel zu hohe Zahl ausgerechnet, aber beide Datumsangaben stimmen, das habe ich mit alert getestet.

Ein weiteres Problem ist auch das setTimeout: Es ruft nach 1 sek irgendetwas auf, das ich nicht verstehen kann; Die Firefox Fehler-Konsole gibt keinen Fehler aus. Aber die Seite wird neu geladen ohne irgendeine js funktion geschweige denn von php, also einfach eine weisse Seite aber auf dieser Seite steht dann das document.write! Der Quelltext ist leer bzw. immer noch am laden!
Ich hoffe das war einigermassen verständlich formuliert...

Gruss Lukas