so che quando c'è di mezzo un evento casuale... c'è da impazzire. ma io ci provo.
ho una chat, la funzione di richiamo delle azioni è questa:
l'istanza è sempre la solita, funzionante. cosa succede?codice:function prenditesto(ultimoid) { var myRequest = null; var r = Math.random(); myRequest = CreateXmlHttpReq(); myRequest.open("GET","getchatdata2.php?lastID="+ultimoid+"&rand="+escape(r)); myRequest.onreadystatechange=function(){ if (myRequest.readyState==4 || myRequest.readyState=="complete"){ if (myRequest.status == 200){ e = document.getElementById("outputList"); azioni = myRequest.responseText.split('-_-_-'); if (azioni.length > 2) { for(i=0;i < (azioni.length-1);i=i+2) { e.innerHTML += azioni[i+1]; } last = azioni[azioni.length-3]; e.scrollTop = 100000000; } } else { document.getElementById(nomediv).innerHTML="ERRORE "+myRequest.status; } } // else document.getElementById(nomediv).innerHTML=myRequest.readyState; // debug } myRequest.send(null); setTimeout('prenditesto(last);',10000); }
il PHP restituisce una stringa del genere:
IDmessaggio-_-_-messaggioveroeproprio-_-_-
moltiplicato per tutti i messaggi compresi in un certo lasso di tempo, con id maggiore di ecc ecc
alla fine c'è un end
la funzione dopo aver splittato, tramite il ciclo for mi scrive i messaggi in un div (solo il messaggio, non il IDmessaggio), e per ultima prende l'ultimo id e lo passa alla variabile, in modo che al prossimo avvio della funzione (dopo 10 secondi) , il ocntrollo avvenga da quello, senza prenderli ancora tutti.
ecco, il PROBLEMA è che casualmente capita che un messaggio appena postato, venga duplicato. Sul db NON è duplicato, viene duplicata solo la visualizzazione. Anche triplicato, a volte. E non capisco come sia possibile.
il fatto che avvenga random può essere colpa della lentezza del sito nel rispondere alla richiesta ajax? ma anche se fosse... perché lo duplica??
grazie e scusate l'ignoranza

Rispondi quotando
