ik heb met ajax en php een chatbox gemaakt. Het werkt allemaal, op één ding na: om te zien wat de andere heeft gezegd, moet je eerst zelf iets zeggen voordat de functie opnieuw wordt uitgevoerd. Ik zou nu graag willen dat de functie handleChat de hele tijd wordt uitgevoerd (elke seconde ofzo). Ik heb al geprobeerd met setTimeout en setInterval maar het lukt me niet. Hoe moet ik dat doen?
Hier mijn code (op basis van het live search script hier op SiMa):
en is het niet mogelijk op een andere manier? ik heb dit gevolgd maar het probleem is nu dat mijn tekst gewoon verdwijnt na het door mij gekozen interval
-bovenaan de code ->
setTimeout("handleChat()",1000);
var timeset = setTimeout("handleChat()",1000);
setTimeout("sendChat()",1000);
var timeset = setTimeout("sendChat()",1000);
idem met setInterval
met setInterval(handleChat,1000); gebeurt er iets: hij zet om de seconde de volledige conversatie weer erbij, ik bedoel, elke seconde verdubbelt de conversatie. dus dat is wat ik niet wil, gewoon elke seconde kijken of er niets nieuws is.
EDIT: die post van Pro, ik heb dat toegevoegd aan mijn script omdat ik dacht dat het mijn hetzelfde was (zie 2 posts eerder), maar omdat ik geen verschil zag heb ik ook het scriptje dat pro poste eens geprobeerd, maar ook daar geen verschil.
wat ik me nu afvraag: in mijn php-code, moet ik dan telkens de hele conversatie ophalen, of gewoon telkens alleen het laatst toegevoegde, want ik heb dat geprobeerd en dan toont die ook telkens alleen maar de laatst toegevoegde.
Wanneer je telkens het hele gesprek mee wilt sturen kost dat veel resources. Sla ergens in een hidden span het laatste bericht ID op wat je hebt gezien, en dan ga je alle berichten requesten die een hoger ID hebben en dus later zijn gepost. Die voeg je dan gewoon toe met ".innerHTML += ajax.responseText;", en je update dan ook direct het laatste ID wat je nu hebt ontvangen in die hidden span.
hmm, sla de oude strlen van de innerhtml op in een variable, bij de volgende interval check je of die lengte overeenkomt, zoniet overschrijf je de zaak.
het script werkt nu (deels) hoe ik het wil: het update nu automatisch, dus men hoeft de pagina of de functie niet meer zelf te verversen.
In IE werkt dit heel mooi, maar in FF "flikkert" de div waarin de responsetext geplaatst wordt om de 500 milliseconden (de settimeout tijd).
Ook nog iets over het enkel toevoegen van nieuwe content: ik heb geprobeerd om de huidige content op te slaan in een variabele, en dan enkel de nieuwe content toe te voegen, maar dat is me niet gelukt. Maar met het script dat ik nu heb (in IE toch), lijkt het zo dat enkel nieuwe content toegevoegd wordt, aangezien de huide tekst niet even flikkert (en dus opnieuw geladen wordt).