ugrás a tartalomhoz

setinterval gondok

nyakas · 2012. Ápr. 10. (K), 01.00
Adott az alábbi kód, amiben a setInterval csak egyszer hajtódik végre:
  1. <head>  
  2. <script src="http://code.jquery.com/jquery-latest.js"></script>  
  3. <script type="text/javascript">  
  4.          
  5.        $(document).ready(function(){  
  6.             setInterval($.post("iro.php",  {i1: 5}), 4000);  
  7.               
  8.         });</script>   
  9.            
  10.            
  11.          </head>  
  12.   
  13. <body>  
  14.   
  15. <?php  
  16. print("CSŐ!");  
  17. ?>  
  18.   
  19. </body>  
a $.post jquery parancsban ez hívódik meg:
  1. <?php  
  2. $phpVar = $_POST["i1"];  
  3. $f = fopen("textfile.txt""a");  
  4.       
  5.     fwrite($fdate("d/m/y : H:i:s", time()) . " " . $phpVar . "\n" );   
  6.       
  7.     fclose($f);  
  8. ?>  
A jquery tökéletesen működik, az iro.php hozzá is fűzi a dolgot a textfile.txt-hez, de azonban csak egyszer, tehát nem fut le egynél többször a setinterval. Valakinek valami ötlete?
Mondjuk a kimeneti fájlban 2 órával korábbi időpontot jelez, de gondolom ez nem jelentheti a gond forrását. Köszönöm előre is. További szép napot! :)
 
1

callback

Poetro · 2012. Ápr. 10. (K), 06.22
A setInterval egy függvényt vár első paraméternek, de te a $.post visszatérési értékét adod át neki első paraméternek. Átfogalmazva: neked egy függvény referenciát kell átadnod a setInterval-nak, de te egy függvény futásának eredményét adod vissza. És mivel nem egy függvényt adsz át a setInterval-nak, ezért az nem is fog meghívódni többször. Ami a te általad felírt kódban történik:
  • Meghívód a $.post függvényt a "iro.php" és {i1: 5} paraméterekkel.
  • Átadod a $.post("iro.php", {i1: 5}) futásának az eredményét a setInterval-nak.
  • Amennyiben az egy függvény, akkor az 4 másodpercenként lefut.


Hogyan lehet átadni egy függvényt paraméterként egy másik függvénynek? Többek között erről is olvashatsz JavaScript függvények című cikkemben, itt a Weblaboron.
2

setInterval($.post("iro.php",

Karvaly84 · 2012. Ápr. 10. (K), 16.02
  1. setInterval($.post("iro.php",  {i1: 5}), 4000)  
helyett
  1. setInterval(function() {  
  2.     $.post("iro.php",  {i1: 5});  
  3. }, 4000)