Newsgroup: it.comp.lang.javascript
Titolo: [Ajax] XMLHttpRequest e variabili globali.

Ciao.
Questo è lo snippet:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://
www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script language="JavaScript" type="text/JavaScript">
var req = null;
function processReqChange() {
    if (req.readyState == 4 && req.status == 200 ) {
        xml=  req.responseXML.documentElement;
        /* Dichiaro links global */
        links= new Array();
        var item= xml.getElementsByTagName('item');
        for(var i=0;i<item.length;i++){
            links[i]= new Array();
            for(var y=0;y<item[i].childNodes.length;y++){
                if(item[i].childNodes[y].tagName=='id' ||
item[i].childNodes[y].tagName=='title'){
 
links[i].push(item[i].childNodes[y].firstChild.data);
                }
            }
        }
      }
//alert(links);
}
function loadUrl( url ) {
  if(window.XMLHttpRequest) {
    try { req = new XMLHttpRequest();
    } catch(e) { req = false; }
  } else if(window.ActiveXObject) {
    try { req = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {
    try { req = new ActiveXObject('Microsoft.XMLHTTP');
    } catch(e) { req = false; }
  } }
  if(req) {
    req.onreadystatechange = processReqChange;
    req.open('GET', url, true);
    req.send('');
  }
}
function test()
{
alert(links);
}
loadUrl('xml/items.xml');
window.onload=function(){
test();
}
</script>
</head>
<body>
<body>
</body>
</html>
Praticamente faccio caricare un file xml
per recuperare i valori dei tag id e title
e metto tutti i valori in un array che dichiaro
globale all'interno di processReqChange e fino
qui no problem.
Dopo aver costruito l'array lo vorrei utilizzare
per implementare un sistema di paging per
permettere all'utente una veloce scorsa di tutti
i titoli presenti nel sito.
Il problema è che l'array links non è
visibile all'interno di test come mi aspetterei.
Ho l'impressione di fare un errore di fondo
ma non riesco a venirne fuori mi date una
mano ;)
Bye.

 e ora sono uno splendido quarantenne."
Grazie dell'appunto ma sono arrivato
a questa conclusione.
Data la natura asincrona della
XMLHttpRequest l'array quando
viene caricata la pagina non sempre
è disponibile (può esserlo o no) da qui
l'errore.
Che ne pensate ?
Sto ripiegando a meno di interventi
risolutivi in una classetta JsBuilder
che mi scrive l'array in un file js
da allegare alla index (per adesso
mi sembra il modo migliore )
meno figo ma it works ;)
Che ne pensate ?
Bye.

 Che ne pensate ?
che è probabile ... perché semplicemente non la richiami onload, oppure
direttamente dentro la test() ?
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.


wrote:

Si ho provato ma l'array si popola quando ha
diciamo il via libera dal server quindi cambia poco
sembrava un' idea anche a me :(
Oltre tutto la visibilità dell'array mi serve in due
funzioni puoi trovare tutto il codice 
http://www.iwdn.net/showthread.php?t=5981
ottimo forum non il mio thread ;)
Ciao.

 diciamo il via libera dal server quindi cambia poco
cambia poco?
se window.onload popoli, attendi il risultato e POI esegui test() non può
non cambiare ... oppure settala sincrona e ti togli ogni pensiero.
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.


Questa è buona sembra l'uovo di colombo ;)))
Ho provato e sembra funzionare domani (giornataccia)
faccio ulteriori prove ..........
Ciao.

 Questa è buona sembra l'uovo di colombo ;)))
:-) ahimé (anzi, ahité), non potrai però più dire in giro che hai usato
ajax ... :-)
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.


:lol: :lol: :lol: :-)


^_^ it works !
http://www.blogial.net/demo/bloggerino/xml/index.php
Grazie dell'aiuto.
Bye.


Prima, però, leggiti questo:
 
http://ajaxblog.com/archives/2005/05/25/synchronous-requests-bad
MM

  
http://ajaxblog.com/archives/2005/05/25/synchronous-requests-bad
bah ... "So, to repeat, Synchronous Requests == BAD"
articolo quantomeno discutibile e assolutamente parziale.
l'uso sincrono o asincrono dipende dal contesto e dalle necessità; in
questo caso mi sembra perfetto.
io non ho *MAI* usato chiamate asincrone, preferisco bloccare il client (ma
questa non è una risposta ma soltanto un mio modo preferenziale di sviluppo
per xmlhttp).
il server è bloccato, dorme, ci mette una cifra? beh, ma il server è lo
stesso della pagina: se si blocca lì si bloccherà anche ricaricando la
pagina, cambiandola etc => rivedere la programmazione, aumentare l'hardware
o la banda etc etc.
ripeto: l'articolo è assolutamente parziale e fa un esempio assurdo (che
poi un server ci metta 10 secondi a rispondere a una request, beh, o è
seguito da qualche centinaio (come minimo) di utenti contemporanei (e
allora mediamente il proprietario è alle maldive), oppure è un 386sx e
andrebbe rifatto).
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 poi un server ci metta 10 secondi a rispondere a una request, 
Che c'è di assurdo in una richiesta che impiega 10 secondi? Non tutte le
applicazioni possono rispondere istantaneamente. Dipende da quello che il
server deve fare, da il tempo che ci mettono a rispondere eventuali
backend, o da altri fattori.
Max

 Che c'è di assurdo in una richiesta che impiega 10 secondi? 
più che assurdo parliamo dello 0,0001% dei casi
Ma mi ripeto: contesto il "bad" sparato lì così con un esempio che nella
pratica ha dell'assurdo, non difendo a spada tratta una o l'altra strada.
"sincrono is bad" è vergognoso, spero solo che chi l'ha scritto (non so se
sei te) ci piazzi un bel IMHO e non pensi che quello sia un articolo serio.
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 io non ho *MAI* usato chiamate asincrone, preferisco bloccare il client
Io ad esempio ho la tendenza opposta: Utilizzo le richieste asincrone
solo se usare le asincrone per quella necessità dovesse tramutarsi in  
bagno di sangue :) questo perché preferisco impegnare il client anche
per altri compiti.
Ma, ripeto, è una tendenza. Nella realtà, dipende dalla necessità. Il
tutto parlando di sviluppo intranet, comunque.
-- 
~ Se i sintomi persistono, insultare il medico.

 tutto parlando di sviluppo intranet, comunque.
esatto, dipende dal contesto, dalla necessità e anche dall'impostazione
dello sviluppatore.
