Temporizzare funzioni JS

  • Creatore Discussione Creatore Discussione as84
  • Data di inizio Data di inizio

as84

Nuovo Utente
30 Apr 2007
5
0
0
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?

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);
}
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.nodeValue != null) {
AppoggioTag.push(tagNodo.childNodes);
//
=======================================================================================================
if (tagNodo.childNodes.nodeType == 3) {
text = tagNodo.childNodes.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.nodeValue.split("
"));
}
linkcheckerutil.parseTagTree(tagNodo.childNodes);
}
},

/**
* 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
 

Discussioni simili