Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    62

    [Ajax] Scriptino piccolo ma pesante

    Ciao ragazzi!
    Come da titolo: ho questo script che compie le seguenti operazioni:
    - ottiene con una richiesta ajax un file xml contenente informazioni
    - con queste popola una tabella con metodi DOM
    - una volta finito di popolare la tabella richiama il metodo con un timeout impostato ad un secondo

    Anche se imposto il timeout a 5 secondi, dopo un tot di esecuzioni mi si pianta la CPU.
    Vi prego aiutatemi perchè sono due giorni che cerco di capire cosa c'è che non va e ormai mi sta scoppiando la testa!! Grazie mille a tutti comunque

    codice:
    function drawWarsTable()
    {
    	/* popolo la tabella con i dati indicati in warslist.xml */	
    
    	/* leggo prima di tutto la lista delle guerre */
    	xmlhttp = new XMLHttpRequest();	
    	xmlhttp.onreadystatechange = function()   
    	{	
    		if(xmlhttp.readyState == 4 && xmlhttp.status == 200)   
    		{
    			response = xmlhttp.responseXML;
    			wars = response.getElementsByTagName("war");
    			
    			//ottengo il nodo della tabella 
    			table = document.getElementById("wars_list_table");
    
    			/* DISTRUGGO E RICREDO IL NODO TBODY CHE CONTIENE LE RIGHE DELLA TABELLA */
    			/* DISTRUZIONE */
    			tbody = document.getElementById("wars_list_tbody");
    			if(tbody)   tbody.parentNode.removeChild(tbody);
    			/* CREAZIONE */	
    			tbody = document.createElement("tbody");
    			tbody.id = "wars_list_tbody";
    			// lo inserisco prima del tfoot
    			table.insertBefore(tbody, table.childNodes[2]);
    
    			// adesso creo un ciclo for che mi scorre tutte le guerre presenti nel file
    			for(counter=0; counter<response.getElementsByTagName("warslist")[0].getAttribute("number"); counter++)
    			{			
    				// per ogni guerra creo 1 riga nella tabella
    				riga = document.createElement("tr");
    				riga.setAttribute("onclick", "selectRow(evt);");
    
    				// per ogni riga creo 7 colonne con gli attributi della guerra
    
    				/* wid */
    				colonna0 = document.createElement("td");
    				colonna0.innerHTML = wars[counter].getAttribute("wid");				
    				/* nome guerra */
    				colonna1 = document.createElement("td");
    				colonna1.innerHTML = wars[counter].getAttribute("warname");
    				/* giocatori */
    				colonna2 = document.createElement("td");
    				colonna2.innerHTML = wars[counter].getAttribute("playing") + "/" + wars[counter].getAttribute("players");
    				/* missioni */
    				colonna3 = document.createElement("td");
    				colonna3.innerHTML = wars[counter].getAttribute("missions");
    				/* unità iniziali */
    				colonna4 = document.createElement("td");
    				colonna4.innerHTML = wars[counter].getAttribute("starting_units");
    				/* valore carte */
    				colonna5 = document.createElement("td");
    				colonna5.innerHTML = wars[counter].getAttribute("cards_value");
    				/* lingua */
    				colonna6 = document.createElement("td");
    				colonna6.innerHTML = wars[counter].getAttribute("language"); 
    				/* privata */
    				colonna7 = document.createElement("td");
    				colonna7.innerHTML = wars[counter].getAttribute("password");
    				/* turni giocati*/
    				colonna8 = document.createElement("td");
    				colonna8.innerHTML = wars[counter].getAttribute("turns");
    				
    				riga.appendChild(colonna0);
    				riga.appendChild(colonna1);
    				riga.appendChild(colonna2);
    				riga.appendChild(colonna3);
    				riga.appendChild(colonna4);
    				riga.appendChild(colonna5);
    				riga.appendChild(colonna6);
    				riga.appendChild(colonna7);
    				riga.appendChild(colonna8);
    				
    				tbody.appendChild(riga);
    			}
    			setTimeout("drawWarsTable()", 1000);
    		}
    	}			
    	xmlhttp.open("GET", "warslist.xml", true);
    	xmlhttp.send();
    }

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Prova a creare l'oggetto fuori dalla funzione (globale)

    var xmlhttp = new XMLHttpRequest();
    function .....

    ed il richiamo temporizzato setTimeout() fuori dalla funzione che tratta il risultato (lo sai che detta funzione viene invocata piu' volte per ogni chiamata ajax, vero? )

    ps: e' solo un tentativo
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    62
    in che senso viene richiamata PIU' volte?

    Io mi aspetto che richiami la funzione al termine di questa: una volta finita di popolare la pagina richiamati tra tot secondi.
    Insomma, non è una crescita esponenziale XD
    O sbaglio? Cosa intendevi tu? :P

    Comunque adesso non mi da piu il problema. Non so da cosa dipenda, ma preferisco un problema duro da risolvere che un problema che si presenta raramente

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 © 2025 vBulletin Solutions, Inc. All rights reserved.