Sleep ->(php kommando) -> Sleep

Tags:    javascript

hejsa udviklere
jeg har meget lidt forstand på javascript, men da jeg ved det kan gøre ting i bevægelse tænkte jeg på om det er muligt at lave et scrip nemt som gør følgende:

(javascript)
SLEEP(10sek)
(efter 10 sekunder gør den en php kommando)
SLEEP(10sek) igen
(gør en anden php kommando)
og så få den til at gøre det X antal gange, hvor hvergang den ikke er i Sleep mere, udskriver den PHP kommando, og så sleeper igen, og så gentager sig selv igen og igen X antal gange


MVH
kasper torp



10 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Det kan helt sikkert lade sig gøre. Jeg kan ikke give dig den præcise løsning, men jeg ville bruge en rekursiv løsning. Altså lave en funktion der kalder sig selv noget i denne stil:
Fold kodeboks ind/udKode 

variable ms du parser ind i funktionen er så antallet af milisekunder der skal gå mellem hvert kald, dvs. 10000 hvis du vil have den til at køre hvert tiende sekund. dit php kald kan du gøre på flere måder, men jeg vil anbefale dig at kigge på jQuery frameworket her: http://api.jquery.com/jQuery.ajax/

Du kan også kigge lidt her på sleep implementeringen: http://www.digimantra.com/tutorials/sleep-or-wait-function-in-javascript/



Indlæg senest redigeret d. 21.08.2010 20:41 af Bruger #6528
Den rekursive loesning er den rigtige ide, men lidt at gaa over aaen efter vand. JavaScript har en ganske udmaerket indbygget timer- og interval funktion, henholdsvis kaldet setTimer og setInterval.

Jeg ville goere noget i stil med:
Fold kodeboks ind/udKode 


--jeg beklager ioeverigt manglen paa danske bogstaver, jeg sidder paa en netcafe i Japan ;)



Indlæg senest redigeret d. 22.08.2010 10:47 af Bruger #8223
tak for svaret steffen, jeg vil rode lidt med det, og se om jeg kan få nogen godt ud af det,
men er der en måde hvorpå man kan gøre så scriptet kun kører f.eks. 10 gange eller 100?

min kode ser således ud.
Fold kodeboks ind/udKode 

men den siger der er en fejl i den øverste linje? nogen ide hvorfor



Indlæg senest redigeret d. 21.08.2010 20:59 af Bruger #14510
Jeg synes at den rekursive løsning lyder gral. Hvis det var mig, og jeg havde muligheden, så havde jeg lavet et cron job.



Jeg synes at den rekursive løsning lyder gral. Hvis det var mig, og jeg havde muligheden, så havde jeg lavet et cron job.


hej martin, nu er det sådan, at jeg ingen anelse har om hvordan man sætter et cronjob op og bruger den, har søgt på nettet men det forvirrer mig-
har du EVT et link til en god TUT?



han kan vel ikke bruge cron jobs hvis kørslerne skal køre specifikt efter hvilken bruger der er logget ind?



Steffen Pedersen, det er helt rigtigt, men jeg synes ikke at han skriver noget om en bestemt bruger.

Metoden som Per kommer med er den jeg ville bruge, hvis et cron job ikke er muligt.



enig med at Per's løsning med timeren er helt korrekt. Som sagt kunne jeg ikke give en helt korrekt løsning da jeg ikke er helt ferm til javascript :)

Kasper: Du skal dog være opmærksom på at du ikke kan sætte din kode ind i javascriptet på den måde du har gjort i dit eksempel. Du er nødt til at sætte php koden ind på en anden side og kalde den med et "ajax" kald.



<?php
// side1.php kode her
?>
<p>Udførte trin 1, vent 10 sekunder på trin 2</p>
<script type="text/javascript">
setTimeout(function() {
location = "side2.php"
}, 10000);
</script>

Denne kode venter 10 sekunder efter at siden er blevet indlæst og indlæser så en anden php side, som igen kan returnere sit eget JavaScript, der igen venter 10 sekunder.



<?php
// side1.php kode her
?>
<p>Udførte trin 1, vent 10 sekunder på trin 2</p>
<script type="text/javascript">
setTimeout(function() {
location = "side2.php"
}, 10000);
</script>

Denne kode venter 10 sekunder efter at siden er blevet indlæst og indlæser så en anden php side, som igen kan returnere sit eget JavaScript, der igen venter 10 sekunder.


Der er også setInterval() funktionen, som udfører koden med bestemte intervaller. Du kan så stoppe efter 10 gange med clearInterval().

Det der busy wait loop er en skidt idé.



t