Newsgroup: it.comp.lang.javascript
Titolo: passaggio dati tra pagine

Cao a tutti... è la prima volta che scrivo su questo NG.
Ho questa necessità: sto implementando un timer grafico
su una pagina ASP (praticamente una barra che diventa
via via colorata), la barra è pronta e funziona (tramite VBS)
ma, logicamente, si aggiorna solo al cambio pagina e questo
non è... nè bello nè professionale.
Ho trovato uno script JAVASCRIPT che farebbe al mio caso,
mi occorrerebbe solamente passare il valore della variabile
che segna il momento corrente nel timer.
In pratica la barra viene inizializzata al valore 1 quando si carica
la pagina, poi quando io passo alla prossima pagina (che nel mio
caso è la stessa solo con contenuti diversi aggiornati tramite asp)
devo poter conservare quel valore per ridisegnare la barra timer
dal punto preciso in cui era prima dell'aggiornamento della pagina.
Cosa fondamentale:
- non devo usare cookie
- non devo usare frames
Grazie per l'eventuale aiuto.
-- 
ciao!
...nixs.................................................................
Lat.: 41° 7' 50" N  Long.: 14° 38' 41" E
nixs.lucchetto.@lagirandola.it
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perché invecchia,
ma invecchia perché smette di giocare.
(George Bernard Shaw) 

 che segna il momento corrente nel timer.
Passarlo via querystring?
 tuapagina.htm?tuovalore
poi lo recuperi con 
 tuovaloreiniziale=window.location.search.substr(1);
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 dal punto preciso in cui era prima dell'aggiornamento della pagina.
Se la barra s'incrementa solo per un fattore di tempo, potresti anche
non passare alcun dato. Se, chessò, in 2 secondi deve fare tot pixel,
puoi salvare in sessione il timestamp relativo alla generazione della
pagina; così quando poi devi ridisegnare la barra, ti guardi il tempo
che è trascorso e in base a quello decidere di quanti pixel farla.
Lato client, utilizzi lo stesso rapporto tempo/pixel per animarla, et
voilà.
Ricorda che ciò che viene inviato dal client, verso il server, si può
benissimo manomettere. In questo modo sei più sicuro. Di contro, vi è
il problema della "latenza".
Dipende quindi dal contesto in cui sei, e se per te è imperativo o no
che il dato non sia manomesso.
Il tutto, ammesso e concesso che abbia afferrato il tuo post. :)
-- 
~ "Gli affetti profondi somigliano alle donne oneste;
hanno paura di essere scoperte e passano nella vita
con gli occhi bassi." (G. Flaubert)

 tuovaloreiniziale=window.location.search.substr(1);
no perchè il furbetto potrebbe manomettere la qs e modificare
i tempi


 voilà.
Beh... detto così sembra facile, ma io di javascript ne so molto poco,
al massimo riesco a fare piccole modifiche (da qui il risorso a voi del NG),
mentre con asp e vbs faccio tutto.
Lo script (che proviene da 
html.it
) è questo:
<script>
// VARIABILI NECESSARIE
var tot_secondi=1200;
var final_url="
http://www.html.it
";
function avvia(){
 avanzamento=setInterval("avanza()",(tot_secondi*10));
}
a=1;
function avanza(){
  if(a<101){
    document.getElementById('percentuale').innerHTML=a+"%";
    document.getElementById('percentuale').style.backgroundPosition="-"+(100-a)+"px";
    ++a;
  }else{
    clearInterval(avanzamento);
    location.href=final_url;
  }
}
</script>
Da quel che capisco è la variabile "a" a dover essere mantenuta per 
ricordare
il momento corrente.


 ricordare il momento corrente.
Esatto, e quello lo fai da ASP non da JS. Banalmente, sarebbe tipo:
var a= <%= valoreServerDiA %>;
-- 
~ "Viviamo dei vuoti lasciati da qualcun'altro."

> var a= <%= valoreServerDiA %>;
qui ci ero arrivato, quello che non so fare è assegnare
ad una variabile session (quindi all'interno dei
delimitatori ASP) il valore di una variabile di un JS


 delimitatori ASP) il valore di una variabile di un JS
Mi sa che non hai ben compreso il mio post, allora, perché questo
passaggio non lo devi fare. Non devi salvare nessuna variabile JS
nella sessione ASP. Difatti esordivo con:
	"Se la barra s'incrementa solo per un fattore di tempo, 
	potresti anche non passare alcun dato."
Prova a rileggere quello che ti ho scritto, se i dubbi persistono
chiedi pure.
-- 
~ "Le leggi sono come le ragnatele:
abbastanza forti per catturare i deboli,
troppo deboli per trattenere i forti."
(Anacarsi lo Scita)

 chiedi pure.
ho letto, ma forse non hai guardato lo script nel messaggio
precedente.
Se ho ben capito quello che dici, tu intendi (quando parli di "timestamp")
salvare in una session l'orario corrente quando la pagina viene caricata
e lavorare sulla differenza tra quell'orario e quello via via variabile 
durante
il cambio pagine.
Invece lo script NON lavora con l'orario, ma con una variabile
incrementale che aumenta di una unità ad ogni secondo, così
che quando viene caricata la pagina questa variabile = 1 e avanza
fino al valore max di secondi settato con:
var tot_secondi=120;
Quindi la mia intenzione era di salvare in una session semplicemente
il valore corrente di "a" (che è il contatore), in modo da ritrovare
il valore dopo il caricamento di una nuova pagina, molto semplice.
A me basta sapere come far dialogare il VBS lato server e il JS
lato client, e cioè come fare una roba così:
<% session("Valore_corrente_a") = Valore_a_del_JS %>
e ripescare quel valore poi così (come suggerivi tu):
<script>
    a = <%= session("Valore_corrente_a") %>;
</script>



Per te è imperativo che non vengano manomessi i tempi. Quindi l'unica
strada percorribile è non mandare alcun dato dal client al server. Ed
il modo che ti ho descritto io fa appunto questo.


 quale partire successivamente con l'animazione.
Capito, provato e... funzionato. :-)
Ora però c'è un problema (un altro!!!????):
la variabile "a" che io pensavo fosse legata ai secondi, in realtà indica
solo la % del tempo totale, così se il Tmax = 10 minuti = 600 sec,
quando sono trascorsi 300 sec la variabile a = 50.
Morale della favola quando vado in un'altra pagina la barra del tempo
subisce un salto (perchè assegno ad a il valore di sec trascorsi).
Io però non ho capito DOVE inserire il numero di secondi che è trascorso
da quando ho salvato il tempo di partenza nella session sul server.
Lo script mostra una funzione che sui miei manuali non ho trovato, è
la setInterval(), dove credo abbiamo a che fare col tempo che passa
(alla quale poi credo sia collegata la funzione clearInterval).
Guarda un po' te, lo script semplificato:
<script>
 var tot_secondi=120; //questo è il tempo totale che nel mio caso potrebbe
variare di volta in volta
 function avvia(){    //questa funzione parte al caricamento della pagina (è
nel tag body)
  avanzamento = setInterval("avanza()",(tot_secondi*10));
 }
 a=1;    // a diventerà 100 quando tutto il tempo impostato in tot_secondi è
trascorso
 function avanza(){    //questa funzione va a modificare l'aspetto di una
<div> per visualizzare la barra
   if(a<101){
     document.getElementById('percentuale').innerHTML=a+"%";
     document.getElementById('percentuale').style.backgroundPosition="-"+(100-a)+"px";
     ++a;
   }else{
     clearInterval(avanzamento);
   }
 }


 la setInterval(), 
Se non l'hai trovata sui manuali, allora ti consiglio di cambiarli :)
Comunque sia, anche in questo caso, non si lavorerà sullo script lato
client; bensì sul server. "Tmax" ti conviene impostarla in ASP, e poi
"stamparla" nello script javascript come facevi per "a".
Poi, in base alla formula di cui sopra, sempre server side ti calcoli
il valore di "a" che andrai sempre a dare in pasto al client.
Per il futuro ti consiglio di consultare queste reference, per il DOM
e per Javascript/JScript:
#DOM w3c
http://www.w3.org/DOM/
#DOM Gecko
http://www.mozilla.org/docs/dom/domref/
#DOM IE
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp
#Javascript 
http://developer.mozilla.org/en/docs/Category:JavaScript:References
#JScript (IE)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/1e9b3876-3d38-4fd8-8596-1bbfe2330aa9.asp
-- 
~ "L'unico requisito necessario affinchè il male si diffonda,
è che le persone per bene non facciano nulla." (Edmond Burke)

 e per Javascript/JScript:
Mail salvata nella cartella IMPORTANTI, grazie!
:-)))


 :-)))
De nada. Buona lettura! :)
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

> Solito discorso di prima.
Fatto tutto, funziona perfettamente.
Di nuovo grazie :-)
