Ciao a tutti quanto 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
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 :)
}
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:
 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"]);
    }
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.
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