Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    70

    funzione ajax che a "random" raddoppia un output

    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:

    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);
    }
    l'istanza è sempre la solita, funzionante. cosa succede?
    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    70
    up

    ho provato a spostare il timeout più sopra, pensando che forse la funzione "ripartisse" troppo velocemente rispetto alla risposta 4 e 200 del server.
    potrebbe essere la soluzione? purtroppo essendo casuale non riesco a capirlo con certezza... ma forse è casuale perché sono hostato su netsons che è un po' lentino?

    codice:
    ..............
    				} else {
    				document.getElementById("outputList").innerHTML +="ERRORE "+myRequest.status;
    				}
    		setTimeout('prenditesto();',12000);
    		} else document.getElementById("outputList").innerHTML += myRequest.readyState; // debug
    	}
        myRequest.send(null);
        //setTimeout('prenditesto();',1000);
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    70
    mi si presenta ancora il problema, davvero in modo casuale, ad alcuni si, ad altri no, come se dipendesse da ogni persona/broswer, non dal server

    -.-

  4. #4
    hai per caso un link?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.