Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] Zonder alert werkt functie niet

Pagina: 1
Acties:

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Hey allemaal,

ik zit met een raar probleem: ik snap niet hoe het komt, en ik snap niet hoe ik t oplos:

Het probleem: ik ben bezig met een simpel AJAX-scriptje: zodra iemand wil chatten start er een functie die de naam via ajax in een database plaatst, en vervolgens een andere functie aanspreekt die elke 2 seconden kijkt of er een nieuw bericht is geplaatst:


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Start met chatten
function startChatten() {
        var poststr = "auteur=" + document.getElementById("auteur").value;      
        
        // AJAX-call: plaatst o.a. de naam van de auteur in de database
        makePOSTRequest('./AJAX/startChat.php', poststr);
        alert(poststr);

        // Trigger de loop om de chat elke seconde te verversen
        onderhoudChat();    
}

// Check voor nieuwe berichten
function onderhoudChat() {
        var poststr = "sessie=" + document.getElementById("sessie").value
        +"&auteur=" + document.getElementById("auteur").value;
        
        // AJAX-call om de chat bij te werken
        makePOSTRequest('./AJAX/refreshChat.php', poststr, 'onderhoud');
        
        // Voer de functie over een seconde opnieuw uit 
        setTimeout(function(){onderhoudChat()}, 1000);      
}


Zodra de functie startChatten() aangeroepen wordt, verandert via php de pagina en komt de chatpagina tevoorschijn en kan men beginnen met chatten. Dit werkt allemaal prima, MITS ik de alert van regel 7 aanroep! Verander ik de inhoud van de alert (bv. alert("bla"); ), of haal ik de alert helemaal weg, dan werkt de chat opeens niet meer. Ik heb geprobeerd om de functie "onderhoudChat()" met een settimeout aan te roepen, zodat de nieuwe pagina eerst kan laden, maar ook dit werkt niet. Zonder "alert(poststr)" werkt het niet...

Ik snap niet wat de reden is waarom t opeens wel werkt als ik de variabele poststr alert. Kan iemand het me het uitleggen? Want dan kan ik op zoek naar een oplossing voor dit vreemde probleem...

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 16:45
Mijn gok is dat die request nog geen gegevens heeft opgeleverd, waardoor de rest van de functie zonder gegevens wordt afgewerkt. De request stopt het verloop van die functie, waardoor de request afgehandeld kan worden. Je kan 's proberen om pas verder te gaan met die functie totdat de request gelukt is.

Skat! Skat! Skat!


  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Dat leek mij ook, vandaar dat ik de SetTimeout ertussen had gezet; Ik heb t zelfs geprobeerd met 10sec, maar ook dat mocht niet baten.

Jij bedoelt dus bv.:
JavaScript:
1
2
3
if (makePOSTRequest('./AJAX/startChat.php', poststr)) {
        onderhoudChat();
}

waarbij "makePOSTRequest" true of false moet returnen?

Edit Ook dat werkt niet, zonder alert()... (Ik ben er nu wel achter dat er niet perse poststr in de alert moet, maar er moet wel nog steeds iets gealert worden. Heeft het misschien iets met een focus op de pagina te maken ofzo?

[ Voor 67% gewijzigd door H004 op 20-09-2007 18:10 ]


  • Cartman!
  • Registratie: April 2000
  • Niet online
Hoe ziet de functie makePOSTRequest er uit? Ik gok dat de functie asynchroon is maar je hem synchroon behandelt. Omdat die alert even tijd kost om weer weg te klikken en je script daar dus stopt zal de request wel compleet zijn om naar de volgende functie te gaan waar de data beschikbaar is. Als je de alert niet aanroept zal de volgfunctie direct worden aangesproken terwijl de data nog niet terug is en doet hij het niet.

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Vorig jaar heb ik een artikel geschreven over het queuen van XML Requests in AJAX/JavaScript ... wellicht heb je daar wat aan? Hier kun je hem vinden als PDF

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Hier heb ik zeker wat aan, zo te zien. Ik ga het morgen meteen testen. Bedankt voor de tip (en het schrijven van het artikel)!

Desalniettemin heeft Cartman wel gelijk dat de eerste functie eigenlijk niet per se asynchroon hoeft te zijn, en ik het ook op kan lossen door die eerste functie gewoon synchroon aan te spreken. Dat is eigenlijk wel de beste oplossing, al komt die XLMrequestqeue ook goed van pas in de verdere applicatie. Thanks!
Pagina: 1