• User Newbie

    Sopravvivenza variabile javascript dopo refresh

    Salve ragazzi, ho il seguente problema:

    ho bisogno di una variabile in javascript che mi sopravviva anche dopo un refresh della pagina.

    Insomma io dichiaro una variabile globale x=calcola_valore();

    Il valore di questa variabile mi serve dopo che è stato effettuato un refresh della pagina. Invece dopo il refresh tale valore viene perso.

    Esiste un modo in js che mi consente di trasferire un valore di una variabile alla stessa pagina?


  • ModSenior

    Ciao bulbius

    penso che tu abbia a disposizione alcune strade diverse:

    1. potresti usare location.search se utilizzi pagine statiche html.

    2. se la tua è una pagina dinamica scritta cioè in linguaggi come php, asp, asp.net, ruby, python, o perl potresti passare al momento del refresh la variabile che ti serve nella querystring (ad esempio nomepagina.php?variabile=valore) e recuperarla al reload della pagina leggendo nei rispettivi linguaggi il parametro e settarlo nel tuo codice javascript come variabile.

    3. utilizzando un cookie e le funzionalità proprie del javascript per gestirli per i browser abilitati (al 99% dei casi oggi praticamente tutti i browser fanno uso di cookies).

    Se ti è possibile suggerirei la 2° strada.


  • User Newbie

    La mia è una pagina dinamica in php dove a una certa azione dell'utente riapro la stessa pagina passando vari parametri per aggiornare le informazioni.
    Ora potrei passare la variabile javascript tramite form con un input hidden e il metodo post. Il problema è che quando vado ad eseguire il metodo post mi riapre la pagina passando si la variabile js ma non le altre variabili php.
    Purtroppo il valore della variabile lo posso ottenere solo con js e preferisco non usare i cookies.

    Il tuo secondo metodo sembra corretto, ma non capisco come faccio a passare una variabile javascript nella querystring.


  • ModSenior

    Se usi PHP i parametri possono essere passati come tutti i linguaggi dinamici o via GET o via POST. Via GET puoi passare tutti i parametri che vuoi per cui non vedo grandi problemi a passare un numero definito di variabili.

    Altrimenti visto che usi php potresti usare le sessioni ma te lo sconsiglio perchè almeno a me dà l'idea di essere codice poco pulito, trattandosi di dati relativi ad una pagina, e non a dati che devono rimanere persistenti per una intera sessione utente.


  • User Newbie

    Come ho già specificato nel mio precedente post io uso php ma la variabile che devo passare è una variabile javascript, quindi come faccio a usarla via get o post?


  • ModSenior

    Ciao bulbius

    scusami ma continuo a non capire.
    Tu stesso hai detto di poter passare eventualmente come campo hidden di una form la variabile javascript che ti interessa. Puoi passare anche tutte le variabili php che ti interessano e recuperarle.

    Una form che presuppone una chiamata POST o GET alla stessa pagina che usi quando fai il reinvio dei dati pertanto hai sotto controllo tutti gli elementi che ti interessano.

    Dopo il reload dovrai scrivere qualcosa di simile a:
    [PHP]
    <?php
    /* se "variabile" è il nome dalla tua variabile javascript e hai usato nella form il metodo POST /
    $variabile = $_POST['variabile'];
    /
    altrimenti se hai usato il metodo GET */
    $variabile = $_GET['variabile'];
    ?>
    [/PHP]
    e nella parte di codice javascript:
    [PHP]
    <script type="text/javascript">
    var nomeVariabile = <?=$variabile;?>; // se si tratta di una variabile -come immagino- di tipo numerico.
    </script>
    [/PHP]


  • User Newbie

    Già, se la passo come campo hidden funziona perfettamente.

    Il problema è che nella mia pagina ci sono vari link e altri form che causano un refresh della pagina. Quindi dovrei aggiungere il campo hidden a tutti i form della pagina in modo che al momento del submit() vengano passate la variabile javascript e anche quelle php.
    Mentre con i link non saprei come fare, cioè se ho un link come questo:
    stessapagina.html?var1=5&var2=10 come faccio a inserire la variabile javascript e passarla così alla stessa pagina?


  • ModSenior

    Per il problema di più form presenti nella stessa pagina è difficile darti una risposta senza vedere niente di concreto.

    Per quanto riguarda invece il passaggio di dati via link potresti associare i link che ti interessano id speciali così da accedervi facilmente via DOM per manipolare gli oggetti della pagina e alterare l'URL secondo come ti torna più comodo.


  • User Newbie

    Ottimo suggerimento! :smile5: per quanto riguarda i link ho associato una funzione al metodo onclick che mi cambia l'href aggiungendo il parametro javascript da passare via GET.

    Per i form ho inserito un hidden in tutti i form che mi conserva il contenuto della var javascript e poi me la passa al refresh tramite POST

    Un pò macchinoso ma funzionante... :fumato: