Newsgroup: it.comp.lang.javascript
Titolo: Temporizzare funzioni JS

Salve a tutti, ho un problema per quanto riguarda le chiamate a
funzioni JS. Lo script che ho postato, la funzione pageLoad riceve in
input un array di URL. Per ogni URL, devo aprire la richiesta,
caricarlo in un iframe, attraversare la sua struttura DOM e cercare
delle keyword. Una volta che ho finito dovrei ripetere lo stesso ciclo
per i restanti URL in maniera SINCRONA. Il problema è il WHILE che
viene eseguito troppo velocemente chiamando le funzioni in maniera
ASINCRONA. Come posso temporizzare le funzioni con l'aiuto di
setInterval() o setTimeout?
pageLoad: function() {
		do {
			var flag = 0;
			var xmlhttp = new XMLHttpRequest();
			var urlBM = BMChildren.shift();			// assegno a urlBM il primo
indirizzo dell'array
			xmlhttp.open("GET", urlBM ,true);		// apro la richiesta col metodo
GET
			alert("PRIMO  "+urlBM);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					if (xmlhttp.status == 200  || xmlhttp.status == 206) {
						document.getElementById("solvent-gutter").contentWindow.location
= urlBM;	// carica la pagina nell'iframe
						alert("SECONDO  "+document.getElementById("solvent-
gutter").contentWindow.location);
						var documento = document.getElementById("solvent-
gutter").contentDocument;
						var corpo = documento.body;
						linkcheckerutil.parseTagTree(corpo);
						InsiemeWordScore = new Array("Strumenti","per","lingue");
						var pos = null;
						var score = 0;
						trovato = 0;
						for (var i = 0; i<InsiemeWordScore.length; i++) {
							pos = linkcheckerutil.trovaKeyword(pos,InsiemeWordScore[i]);
						}
						if ((pos != null) && (trovato != 0)) {
							score = trovato/InsiemeWordScore.length;
							// alert(score);
						}
					}
					else {
						alert("Problem retrieving XML data");
					}
				}
			};
			xmlhttp.send(null);
			flag = 1;
		} while (BMChildren.length > 0 && flag == 1)
	},
	/**
	*  parseTagTree(tagNodo)
	*  attraversa l'albero DOM di ogni pagina in modo ricorsivo
	*/
	parseTagTree: function(tagNodo) {
		//Solvent.debugPrint("linkcheckerutil.parseTagTree");
		for (var i = 0; i < tagNodo.childNodes.length; i++) {
			if(tagNodo.childNodes[i].nodeValue != null) {
				AppoggioTag.push(tagNodo.childNodes[i]);
				//
=======================================================================================================
				if (tagNodo.childNodes[i].nodeType == 3) {
					text = tagNodo.childNodes[i].nodeValue;
					if (!text.match(/^\s*$/)) {
						textSplit = text.split(/\W+/);
						for (var z=0; z<textSplit.length; z++) {
							textTrim = trim(parole(textSplit[z]));
							AppoggioTagValue.push(textTrim.toLowerCase());
						}
					}
				}
				//
=======================================================================================================
				//AppoggioTagValue.push(tagNodo.childNodes[i].nodeValue.split("
"));
			}
			linkcheckerutil.parseTagTree(tagNodo.childNodes[i]);
		}
	},
	/**
	*  trovaKeyword(pos1,word)
	*  effettua il macthing tra le keyword
	*/
	trovaKeyword: function(pos1,word) {
		Solvent.debugPrint("linkcheckerutil.trovaKeyword");
		if (trovato == 0) {
		//alert(AppoggioTagValue.length);
			Solvent.debugPrint(AppoggioTagValue.length);
			for (var t=0; t<AppoggioTagValue.length; t++) {
				for (var y=0; y<AppoggioTagValue[t].length; y++) {
				    if (AppoggioTagValue[t][y] == word) {
				        trovato = 1;
				        return t;
				    }
				}
			}
			return null;
		}
		else {
			for(var k=0; k<AppoggioTagValue[pos1].length; k++) {
				if (AppoggioTagValue[pos1][k] == word){
					trovato = trovato+1;
				    return pos1;
				}
			}
			return pos1;
		}
	}
}
Grazie in anticipo

 			xmlhttp.open("GET", urlBM ,true);
qua sei asincrono ... io metterei direttamente un false e a naso sei a
posto (ovviamente rimuovi la callback e lascia tutto in questa function)
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.


wrote:

Ho provato e non funziona. Ho notato che il secondo alert non viene
mai eseguito.

 mai eseguito.
guarda cosa segnala con firefox: se la setti sincrona e togli di
conseguenza la function callback deve funzionare nello stesso modo (a parte
appunto che attende il valore di ritorno)



wrote:

Ho capito, qui nessuno è di aiuto. Vado a postare in inglese.