Ciao a tuttiquanto tempo che non scrivevo su questo forum
Bhè è arrivato il momento.
Ho un problema: non chiedetemi il perchè ma ho bisogno di recuperare il valore di una var di sessione tramite javascript, o meglio tramite XMLHttp.
Cercherò di essere breve, il problema mi si presenta quando passo da una pagina all'altra, praticamente sulla stessa pagina riesco a settare e a recuperare la variabile di sessione, ma quando passo su un'altra pagina (tramite link) la variabile sembra essere vuota o non settata.. non sòOvviamente ho già controllato se distrattamente la resetto, ma non mi sembra proprio, e la cosa + strana e che cmq lato server la vedo riempita con i valori passati dalla pagina precedente
Vabbè vi faccio vedere un pò di codice.. non vi spaventate, è soltanto un pò verboso
Ora, nell'onload (javascript) del body faccio un bel LoadBody() che a sua volta richiama LoadXMLDoc(). Da notare che LoadBody() non passa parametri alla pagina server-side. Questa funzione punta ad una pagina server-side che vi riporto per completezza (devo farlo scusate), è codice c#, molto semplice:codice:var reqXML; function LoadXMLDoc(url){ //alert(url); if (window.XMLHttpRequest){ //Mozilla, Firefox, Opera 8.01, Safari reqXML = new XMLHttpRequest(); //---> attenzione qui reqXML.onreadystatechange = BuildXMLResults; reqXML.open("GET", url, true); reqXML.send(null); } else if(window.ActiveXObject){ //IE reqXML = new ActiveXObject("Microsoft.XMLHTTP"); if (reqXML) { reqXML.onreadystatechange = BuildXMLResults; reqXML.open("GET", url, true); reqXML.send(); } } else { alert("Il browser utilizzato non supporta alcune funzionalità del sito."); } } function BuildXMLResults() { if(reqXML.readyState == 4) { if(reqXML.status == 200) { alert(reqXML.responseText); if(reqXML.responseText != "") { //se viene trovato il segno di pipe nella seconda occorrenza //setto lo stato del menu if(reqXML.responseText.indexOf("|") == 1) { setCurrentStateMenu(reqXML.responseText); } else { alert("La sessione sembra essere scaduta. Possibile perdita delle informazioni di stato."); } } } else { alert("Si sono verificati problemi nel recuperare i dati di sessione:\n" + reqXML.statusText); } } } function LoadSession() { var sessionParameter = 'c|i|c|c|i|o'; LoadXMLDoc('http://localhost/sito/setSession.aspx?state='+sessionParameter); } function LoadBody() { LoadXMLDoc('http://localhost/anticontraffazione/setSession.aspx'); } function setCurrentStateMenu(state) { //faccio i fatti miei con la sessione recuperata :) }
Quindi quando l'utente apre per la prima volta la pagina la funzione LoadBody() fà una chiamata asincrona e ritornerò una var di sessione vuota. Poi questo utente fà una operazione su questa pagina e fà un'altra chiamata asincrona dove questa volta passerà un parametro, quindi nel codice server-side mi accorgo che la sessione esiste già, che il parametro passato non è null e ritorno la variabile di sessione questa volta con un valore.codice:protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; //se la var di sessione non esiste la creo if (Session["mainMenuState"] == null) { Session.Add("mainMenuState", ""); } //se esiste la modifico con i dati passati else { //se è stato passato il parametro 'state' modifico la sessione altrimenti non la modifico if (Request.QueryString["state"].ToString() != null) { Session["mainMenuState"] = Request.QueryString["state"].ToString(); } } //ritorno la sessione Response.Write(Session["mainMenuState"]); }
L'utente clicca su un link per passare ad un'altra pagina e quindi di nuovo all'onload del body viene fatta la chiamata asincrona senza parametri, il codice server-side si accorge che la variabile di sessione esiste già e "dovrebbe" ritornarmi la variabile precedentemente popolata.. ma questa cosa non succede.. nel senso che via javascript non vedo il valore, ma server side varaibile e valore ci sono.. help![]()


quanto tempo che non scrivevo su questo forum
Ovviamente ho già controllato se distrattamente la resetto, ma non mi sembra proprio, e la cosa + strana e che cmq lato server la vedo riempita con i valori passati dalla pagina precedente 
Rispondi quotando