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