Versio

setTimeout probleem

Overzicht Reageren

Zero XT

Zero XT

27/07/2009 18:11:00
Quote Anchor link
Mensen heeft iemand enig idee waarom mijn setTimeout niet werkt?
Ik heb 4 verschillende dingen geprobeerd maar niets schijnt te helpen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout('' + XMLHttp.funct + '(' + XMLHttp.ajax.responseText + ', ' + XMLHttp.ajax.status + ', ' + XMLHttp.ajax.responseXML + ', ' + parameters + ')', 5000);


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                        setTimeout(XMLHttp.funct(XMLHttp.ajax.responseText, XMLHttp.ajax.status, XMLHttp.ajax.responseXML, parameters), 5000);


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout('XMLHttp.funct(XMLHttp.ajax.responseText, XMLHttp.ajax.status, XMLHttp.ajax.responseXML, parameters)', 5000);


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTimeout(' ' + XMLHttp.funct(XMLHttp.ajax.responseText, XMLHttp.ajax.status, XMLHttp.ajax.responseXML, parameters), 5000);


Bij de laatste word de functie wel uitgevoerd maar niet na 5 sec maar gelijk.
Gewijzigd op 01/01/1970 01:00:00 door Zero XT
 
PHP hulp

PHP hulp

25/05/2012 15:41:40
Gesponsorde koppelingen:
 
Zero XT

Zero XT

27/07/2009 21:20:00
Quote Anchor link
Het blijkt dat dit moeilijker gaat bij objecten:
http://www.webmastercity.nl/forum/viewtopic.php?f=35&t=36461

Ik heb het inmiddels 5x doorgelezen maar ik krijg het niet voor elkaar in mijn eigen code:

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
XMLHttp.ajax.onreadystatechange = function()
{  
    if(XMLHttp.ajax.readyState == 4)
    {  
        XMLHttp.updating = false;
    
        if(functie)
        {
            //De code hieronder moet dus een vertraging krijgen
            XMLHttp.funct(XMLHttp.ajax.responseText, XMLHttp.ajax.status, XMLHttp.ajax.responseXML, parameters);
        }
                                
        XMLHttp.ajax = null;                                        
    }                                                      
}


Iemand enig idee?
Gewijzigd op 01/01/1970 01:00:00 door Zero XT
 
Zero XT

Zero XT

28/07/2009 12:44:00
Quote Anchor link
bump
 
Emmanuel Delay

Emmanuel Delay

28/07/2009 13:49:00
Quote Anchor link
Heb je al die parameters wel nodig?
Je werkt object-georiënteerd. ipv. die parameters zet je eerst die waarden als eigenschappen van dat object.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
Zero XT

Zero XT

28/07/2009 14:43:00
Quote Anchor link
Ik heb wel die parameters nodig. Maar omdat ik object georiënteerd werk, verlies ik mijn scope als ik gebruik maak van de functie setTimeout.

Zie ook:
http://forum.techzine.nl/forum/list_message/1680534

Ik weet nog steeds niet de oplossing voor mijn probleem.
Iemand enig idee?
 
Jelmer rrrr

Jelmer rrrr

28/07/2009 14:54:00
Quote Anchor link
In Javascript kan je eigenlijk niet anders dan closures gebruiken. Dat maakt javascript juist zo leuk! :D

Jij maakt gebruik van een globaal object, XMLHttp? Ik weet niet of ik dat kan aanraden wanneer je speelt met asynchrone dingen als xmlhttpreqest en timeouts.

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
XMLHttp.ajax.onreadystatechange = function()
{  
    if(XMLHttp.ajax.readyState == 4)
    {  
        XMLHttp.updating = false;
    
        if(functie)
        {
            // deze kopieën zijn nodig omdat jij XMLHttp.ajax weer kan
            // veranderen voordat de functie binnen setTimeout is aangeroepen
            var responseText = XMLHttp.ajax.responseText;
            var status = XMLHttp.ajax.status;
            var responseXML = XMLHttp.ajax.responseXML;
            
            // in de functie hieronder neem ik de variabelen uit deze scope mee.
            
            setTimeout(function()
            {
                XMLHttp.funct(responseText, status, responseXML, parameters);
            }, 5000);
        }
        
        XMLHttp.ajax = null;
        
        // nu worden responseText, status en responseXML losgelaten, maar ze
        // blijven bestaan omdat ze nog vast zitten aan die functie in
        // je timeout. Zou je nu binnen die 5 seconden (voor de timeout) opnieuw
        // in deze onreadystatechange functie terecht komen, dan worden de
        // variabelen opnieuw aangemaakt (opnieuw, dus ze overschijven de vorige
        // set variabelen die nu nog aan de functie in je timeout zitten niet!!)
    }
}


Het kan veel mooier als je je XMLHttpRequest instantie niet zo vastkoppelt aan je globale XMLHTTP object zoals je nu doet. Dan hoef je niet meer die losse variabelen te kopiëren, maar kan je gewoon je XMLHttpRequest zo meegeven.

Maar zoek maar eens op closures. Voor Javascript zijn ze essentieel.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer rrrr
 



Overzicht Reageren