Function undefined, hoe kan dat?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

08/12/2011 00:22:49
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
            }
        });
    }
});


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 -
 
PHP hulp

PHP hulp

24/11/2024 02:07:11
 
Fabian M

Fabian M

08/12/2011 08:01:35
Quote Anchor link
setTimeout zet een delay (nu 5000ms), daarna word de code uitgevoerd.
setInterval herhaalt de code.

Conclusie: gebruik setInterval.
 
Erwin H

Erwin H

08/12/2011 09:12:54
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

08/12/2011 09:21:38
Quote Anchor link
Die 'ready' is toch hetzelfde ls de window.onLoad functie, die je gebruikt om functies aan te roepen?
Hoe zou jij het dan doen met Jquery, Erwin?
 
Wouter J

Wouter J

08/12/2011 09:25:52
Quote Anchor link
@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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(loadStation(station_afk));

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
 
Erwin H

Erwin H

08/12/2011 09:27:34
Quote Anchor link
Zo dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$(document).ready(function(){
    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:
@Aar, ik zou de quotes weghalen in setTimeout. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(loadStation(station_afk));

of: setTimeout("loadStation(station_afk)");
Dus ook je variabele binnen de string.
 
- Ariën  -
Beheerder

- Ariën -

08/12/2011 09:39:50
Quote Anchor link
Ik zag dat iemand dit ook zo deed, en dat werkte wel. Hetzij zonder 'ready' maar met de window.onLoad functie. En een functie in setTimeout() hoort toch tussen quotes?
Gewijzigd op 08/12/2011 10:00:27 door - Ariën -
 
Erwin H

Erwin H

08/12/2011 11:00:32
Quote Anchor link
Ja, maar de variabele die je meegeeft niet nog in aparte quotes. Dus functie plus variabele naam binnen dezelfde quotes.
 
- Ariën  -
Beheerder

- Ariën -

08/12/2011 11:03:02
Quote Anchor link
Ik zal zo eens proberen. Wel vreemd dat het wel met quotes werkt op deze URL?

Op een ander buur-forum las ik dat iemand dit aanraadde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(function () { loadStation( station_afk ); }, 5000);

Wat is jouw zicht daarop?
Gewijzigd op 08/12/2011 11:03:42 door - Ariën -
 
Erwin H

Erwin H

08/12/2011 11:14:54
Quote Anchor link
dat laatste lijkt me alleen een "uiterste optie"-optie, omdat je dan een functie gaat definieren, alleen om een functie aan te roepen. Zal qua tijd etc weinig uitmaken, maar erg netjes vind ik het niet.
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)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout("loadStation(station_afk)");
 
Fabian M

Fabian M

08/12/2011 12:26:26
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(loadStation(station_afk));

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.
 
- Ariën  -
Beheerder

- Ariën -

08/12/2011 17:10:37
Quote Anchor link
Aan de quotes lag het in ieder geval niet. Want hij bleef een undefined function aangeven.

De
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(function () { loadStation( station_afk ); }, 30000);
heeft uiteindelijk geholpen.

Als iemand nog een betere mogelijkheid heeft, hoor ik dat graag.
 
Wouter J

Wouter J

08/12/2011 17:28:38
Quote Anchor link
Ik zou dit gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(arguments.callee(station_afk), 3000);


Uitleg van arguments.calle
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.