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();
}