Newsgroup: it.comp.lang.javascript
Titolo: Ricaricare una variabile in un javascript esterno

Salve a tutti,
secondo voi c'è la possibilità di ricaricare in maniera dinamica il
contenuto di un javascript esterno?
Nella fattispecie, ho creato un programma che crea un file Javascript
con una variabile (array) corrispondente alla struttura ad albero di
una directory specifica.
Nella pagina poi viene richiamato un altro javascript che partendo
dalla sopracitata variabile crea la struttura ad albero.
Volendo ricaricare l'albero senza dover ricaricare la pagina, vorrei
appunto richiamare di nuovo la funzione di creazione passandogli il
nuovo script...
spero di essere stato chiaro ;)
Grazie a tutti!

>spero di essere stato chiaro ;)
Non ho capito, in che modo cambia lo script??
Hai più script che agiscono sugli stessi dati o dati diversi??

Hai piů script che agiscono sugli stessi dati o dati diversi??
In pratica in un file JS ho lo script per la creazione della struttura
ad albero.
In un altro file ho la definizione dei nodi dell'albero.
Ad es:
file cache_tree.js contiene:
var TREE_ITEMS = [['cestino', ''], ['dati', '']];
che č richiamato all'interno della mia pagina web cosě:
<script language="JavaScript" src="cache_tree.js"></script>
Succede che un programma (servizio windows da me creato) va ad
aggiornare questo file (cache_tree.js) magari aggiungendo un'altra
cartella pippo e diventa cosě:
var TREE_ITEMS = [['cestino', ''], ['dati', ''], ['pippo', '']];
Vorrei far "rileggere" al browser il file cache_tree.js, aggiornando
la variabile tree_items.
Ovviamente una volta fatto questo, cancello il contenuto magari dello
spam che contiene l'albero e ricarico sempre in dhtml lo script che
rigenera la struttura ad albero (questo č un problema che so
affrontare)
Ho idea che non si possa fare, e che in teoria dovrei leggere di nuovo
il file e provare con eval...mah...ora ci provo ;)
Grazie intanto della risposta e spero di essere stato piů chiaro ;)


</form>
</body>
</html>
Con il primo metodo ipotizzo di scaricare il contenuto del file
con una chiamata xmlhttp (parte mancante ma facilmente
reperibile) e di salvarla nella variabile testo_script per poi
interpretarla con un eval. Importante rimuovere il var, altrimenti
da errore, perchè vuoi semplicemente cancellare il vecchio per
il nuovo albero.
Con il secondo metodo sfrutti la collection degli script,
modificando l'attributo src riscrivendo lo stesso valore.
Questa soluzione potrebbe non funzionare su tutti i browser.
Ciao
Lorenzo

Lorenzo
Grandissimo! La seconda soluzione non mi sarebbe mai venuta in mente.
E ovviamente, essendo quella che mi ispira di più, non mi funziona
(IE6 aggiornato)
Ho verificato che sia il file giusto, mi risputo il risultato, ho
tolto i var etc...ma niente non mi funzia.
Mentre il primo ci avevo già pensato ma mi pare un poco rozzo come
sistema. Più tardi lo provo, e amen se non mi piace ;)
Intanto ti ringrazio moltissimo!

(IE6 aggiornato)
Stessa versione che uso io.
Testato e funzionante garantito.
Hai controllato il codice quando hai copiato dal mio post??
Di solito a me inserisce dei trattini come simboli di impaginazione
e il javascript sballa tutto.
Ciao
Lorenzo

 wrote:

Si si tutto ripulito ...non sono un novello di javascript ;) 
a meno che non abbia dei problemi per l'expire dalla cache...che
potrebbero rognare...eppure quando refresho la pagina è tutto ok: la
nuova versione del js esterno viene correttamente presa.
Missà che dovrò ripiegare sul tuo primo metodo anche se volevo evitare
di usare il metodo per recuperare i dati in http...

 wrote:

Ho trovato: un problema del web server, in pratica non faceva scadere
il file.js immediatamente.
Ora l'ho configurato in maniera tale da considerare immediatamente
scaduto il contenuto del file.
Proverò poi (per ottimizzare il sistema) a cancellare e ricreare il
file invece di cambiarne il contenuto (dal lato del programma che
aggiorna il file js)

aggiorna il file js)
Già provato, è indifferente. Anzi, se qualcuno richiedesse quel file
nei pochi istanti tra cui lo cancelli e lo ricrei: otterrebbe un
errore,
mentre se ti limiti ad aggiornarlo sarebbe sempre disponibile la
versione 
precedente.
Ciao
Lorenzo