JavaScript loop in php
Ik roep een JS functie aan met 2 variabelen.
In de functie vindt een AJAX handeling plaats.
Aan het einde moet een for lus komen tot de 2e variabele is bereikt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function showData(str, TotaalAantal)
{
// AJAX //
for (var i = 20; i <= TotaalAantal; i+=20)
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
}
</script>
function showData(str, TotaalAantal)
{
// AJAX //
for (var i = 20; i <= TotaalAantal; i+=20)
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
}
</script>
Dit werkt dus niet???
for (var i = 0; i <= TotaalAantal; i++)
{
}
maar waarom begin je met de waarde 20? en verhoog je met 20?
Vind een beetje een vaag verhaal.... kun je iets meer vertellen over wat je wil bereiken ben binnen welke context?
Ik denk dat je naar de functie setInterval moet kijken Harry.
Wat ik wil bereiken is als bovenstaand.
Dus: om het AJAX deel met for te loopen tot de TotaalAantal is bereikt... Het werkt dus niet en vraag mij af of het zo wel eens kan..??
Toevoeging op 22/11/2010 19:21:25:
Synaps Framework op 22/11/2010 19:15:47:
Ik denk dat je naar de functie setInterval moet kijken Harry.
Ga ik meteen doen, bedankt voor de tip!
Jaron T op 22/11/2010 19:08:16:
Normaal doe je dat zo:
for (var i = 0; i <= TotaalAantal; i++)
{
}
maar waarom begin je met de waarde 20? en verhoog je met 20?
for (var i = 0; i <= TotaalAantal; i++)
{
}
maar waarom begin je met de waarde 20? en verhoog je met 20?
Dat is niet normaal. Een for loop heeft de betekenis dat je drie expressies evalueert. De eerste wordt de eerste keer geëvalueerd, deze wordt altijd uitgevoerd, na een keer de for loop doorlopen hebben wordt de tweede expressie geëvalueerd om te kijken of de loop nog moet lopen, en de derde wordt altijd op het end van de loop uitgevoerd.
Je kunt er dus van alles mee doen. Beginnen op -100, kijken of de waarde gedeeld door twee 1 is en ophogen met 1. Dat is ook een normale loop. Of achterwaarts. Of... Of... Of...
Code (php)
1
2
3
4
2
3
4
for (var i = 20; i <= TotaalAantal; i+=20)
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
Is deze wijze van variabelen wel goed geschreven in JS?
De functie wordt aangeroepen en gaat zichzelf herhalen tot waarde TotaalAantal is bereikt.
Voor school worden er zo groepjes van 20 mails verstuurd naar anderen.
Maar... het wordt 1x uitgevoerd en blijft hangen bij/in de for loop, denk ik.
De verzendData div is om te zien waar we zijn...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<script type="text/javascript">
function showData(str, TotaalAantal)
{
if (str=="")
{
document.getElementById("verzendData").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("verzendData").innerHTML=document.getElementById("verzendData").innerHTML + xmlhttp.responseText;
/* Auto Scroll Top */
// document.getElementById("verzendData").scrollTop=0;
/* Auto Scroll Down */
var objDiv = document.getElementById("verzendData");
objDiv.scrollTop = objDiv.scrollHeight;
}
}
xmlhttp.open("GET","nbsmtp.php?q="+str,true);
xmlhttp.send();
for (var i = 21; i <= TotaalAantal; i+=20)
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
</script>
<script language = "JavaScript"> showData(1, 100) </script>;
<!--<div id="verzendData"></div>-->
<div id="content">
<p id="verzendData"> </p>
</div
function showData(str, TotaalAantal)
{
if (str=="")
{
document.getElementById("verzendData").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("verzendData").innerHTML=document.getElementById("verzendData").innerHTML + xmlhttp.responseText;
/* Auto Scroll Top */
// document.getElementById("verzendData").scrollTop=0;
/* Auto Scroll Down */
var objDiv = document.getElementById("verzendData");
objDiv.scrollTop = objDiv.scrollHeight;
}
}
xmlhttp.open("GET","nbsmtp.php?q="+str,true);
xmlhttp.send();
for (var i = 21; i <= TotaalAantal; i+=20)
{
setTimeout("showData(i, TotaalAantal)", 3000);
}
</script>
<script language = "JavaScript"> showData(1, 100) </script>;
<!--<div id="verzendData"></div>-->
<div id="content">
<p id="verzendData"> </p>
</div
Gewijzigd op 25/11/2010 11:50:24 door Harry Hartman
Teneerste: een for loop in de functie die dezelfde fuctie aanroept zorgt voor een oneindige lus. :-( dom!
for vervangen door if en als volgt de functie aanroepen i.v.m. met de variabelen:
Code (php)
1
2
3
4
5
2
3
4
5
if(str <= TotaalAantal)
{
str+=20;
setTimeout(function(){showData(str, TotaalAantal);}, 3000);
}
{
str+=20;
setTimeout(function(){showData(str, TotaalAantal);}, 3000);
}
Gewijzigd op 29/11/2010 16:12:00 door Harry Hartman