Function undefined, hoe kan dat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$(document).ready(function(){
loadStation(station_afk);
function loadStation(station_afk) {
console.log('station geladen:'+station_afk);
$.ajax({
url: "station_departures.php?s="+station_afk,
cache: false,
success: function(html){
$(".result").empty().html(html);
setTimeout("loadStation('"+station_afk+"')", 5000);
}
});
}
});
loadStation(station_afk);
function loadStation(station_afk) {
console.log('station geladen:'+station_afk);
$.ajax({
url: "station_departures.php?s="+station_afk,
cache: false,
success: function(html){
$(".result").empty().html(html);
setTimeout("loadStation('"+station_afk+"')", 5000);
}
});
}
});
Kan iemand mij uitleggen waarom hij die ajax-request niet na 5 seconden uitvoert?
Ik zie in Firebug wel staan: station geladen:wd
Firebug zegt na 5 sec: loadStation is not defined
Wel wordt de AJAX request uitgevoerd, maar die setTimeout wordt niet goed uitgevoerd?
How come?
Ik wil gewoon elke 5 sec. een refresh doen.
Gewijzigd op 08/12/2011 00:25:01 door - Ariën -
setInterval herhaalt de code.
Conclusie: gebruik setInterval.
Waarom zet je je loadStation functie definitie helemaal binnen je $(document).ready()? De aanroep begrijp ik, maar de rest kan er toch net zo goed buiten? Ik kan niet zeggen of dat er iets mee te maken heeft, maar ik zou het in elk geval niet op die manier doen.
Hoe zou jij het dan doen met Jquery, Erwin?
@Fabian, setInterval is een verkeerde methode. Deze doet het namelijk elke 5 seconden, het maakt niet uit of de functie al is uitgevoerd hij doet het om de 5 seconden. Dit betekend dat bij AJAX requests er langzamerhand een ophoping van requests kan onstaan op de server, dit wil je natuurlijk niet.
De methode die Aar hier gebruikt is dus goed. Hij roept na het uitvoeren van de functie na 5 sec. de functie opnieuw aan.
@Aar, ik zou de quotes weghalen in setTimeout. Dus:
Ook begrijp ik het begin niet, je roept de functie eerst aan op regel 2 en daarna definieer je de functie? Dat gaat natuurlijk niet werken...
@2e Aar, om simpel te zeggen ja. Om het wat moeilijker te maken, in het echt herhalen ze de document.ready functie niet zo vaak totdat er duidelijk is dat document.body bestaat (en het document dus geladen is), code.
Gewijzigd op 08/12/2011 09:29:25 door Wouter J
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$(document).ready(function(){
loadStation(station_afk);
});
function loadStation(station_afk) {
//Wat je ook wilt doen
}
loadStation(station_afk);
});
function loadStation(station_afk) {
//Wat je ook wilt doen
}
De aanroep naar de functie in de $(document).ready(), de definitie erbuiten.
Nogmaals, ik heb geen idee of dit het probleem veroorzaakt. En verder is het een vraag waarom je het zo doet, want er kan maar zo iets zijn dat ik niet weet...
Toevoeging op 08/12/2011 09:30:17:
Wouter J op 08/12/2011 09:25:52:
@Erwin, dat maakt niks uit. Ik zou het wel zo doen. Lekker makkelijk alles bij elkaar.
Geen technische reden dus. Mijn opvatting is om het juist uit elkaar te halen om het overzichtelijker te maken. Maar uiteindelijk is dat dus gewoon een persoonlijke overweging.
Toevoeging op 08/12/2011 09:39:40:
Wouter J op 08/12/2011 09:25:52:
of: setTimeout("loadStation(station_afk)");
Dus ook je variabele binnen de string.
Gewijzigd op 08/12/2011 10:00:27 door - Ariën -
Ja, maar de variabele die je meegeeft niet nog in aparte quotes. Dus functie plus variabele naam binnen dezelfde quotes.
URL?
Op een ander buur-forum las ik dat iemand dit aanraadde:
Wat is jouw zicht daarop?
Ik zal zo eens proberen. Wel vreemd dat het wel met quotes werkt op deze Op een ander buur-forum las ik dat iemand dit aanraadde:
Wat is jouw zicht daarop?
Gewijzigd op 08/12/2011 11:03:42 door - Ariën -
Op zich moet ik wel zeggen dat ik ook altijd met dit soort functie aanroepen aan het stoeien ben en de meest logische (zoals jij het ook deed) werkt bij mij nooit. Met de quotes zoals ik eerder zei werkt daarentegen altijd (tot dusverre)
Wouter J op 08/12/2011 09:25:52:
@Erwin, dat maakt niks uit. Ik zou het wel zo doen. Lekker makkelijk alles bij elkaar.
@Fabian, setInterval is een verkeerde methode. Deze doet het namelijk elke 5 seconden, het maakt niet uit of de functie al is uitgevoerd hij doet het om de 5 seconden. Dit betekend dat bij AJAX requests er langzamerhand een ophoping van requests kan onstaan op de server, dit wil je natuurlijk niet.
De methode die Aar hier gebruikt is dus goed. Hij roept na het uitvoeren van de functie na 5 sec. de functie opnieuw aan.
@Aar, ik zou de quotes weghalen in setTimeout. Dus:
Ook begrijp ik het begin niet, je roept de functie eerst aan op regel 2 en daarna definieer je de functie? Dat gaat natuurlijk niet werken...
@2e Aar, om simpel te zeggen ja. Om het wat moeilijker te maken, in het echt herhalen ze de document.ready functie niet zo vaak totdat er duidelijk is dat document.body bestaat (en het document dus geladen is), code.
@Fabian, setInterval is een verkeerde methode. Deze doet het namelijk elke 5 seconden, het maakt niet uit of de functie al is uitgevoerd hij doet het om de 5 seconden. Dit betekend dat bij AJAX requests er langzamerhand een ophoping van requests kan onstaan op de server, dit wil je natuurlijk niet.
De methode die Aar hier gebruikt is dus goed. Hij roept na het uitvoeren van de functie na 5 sec. de functie opnieuw aan.
@Aar, ik zou de quotes weghalen in setTimeout. Dus:
Ook begrijp ik het begin niet, je roept de functie eerst aan op regel 2 en daarna definieer je de functie? Dat gaat natuurlijk niet werken...
@2e Aar, om simpel te zeggen ja. Om het wat moeilijker te maken, in het echt herhalen ze de document.ready functie niet zo vaak totdat er duidelijk is dat document.body bestaat (en het document dus geladen is), code.
Sorry. Ik dacht dat hij om de 5 sec bedoelde.
De heeft uiteindelijk geholpen.
Als iemand nog een betere mogelijkheid heeft, hoor ik dat graag.