Passaggio di valori fra funzioni

di il
40 risposte

40 Risposte - Pagina 2

  • Re: Passaggio di valori fra funzioni

    Ciao. Ti ringrazio tantissimo per il supporto. Ora funziona in parte. Avevo già provato con successo il metodo che mi hai illustrato. Lo lasciai perdere perchè mi succedeva come mi succede adesso. Memorizzo i dati di ogni singola guardia però quando chiudo il browser e lo riapro nello storage non c'è nulla. Ho paura di avere qualche bug mi sa. Non so come meglio esporre il problema. Ho provato a lanciare il browser da visual studio code con: start index.html. Per chiarire sto cercando di implementare il codice che con la console funziona perfettamente ma ora che sto usando HTML ci sono parecchi problemi. La procedura che uso è la seguente:

    1-Lancio index.html

    2-Lancio la pagina “menu guardie”

    3-Lancio la pagina "inserisci.

    4- Inserisco i dati e controllo nello storage la memorizzazione dei dati.

    5-Chiudo tutto

    6- Riapro seguendo la procedura di prima senza inserire dati e non c'è nulla nello storage

    Forse è la procedura sbagliata per controllare lo storage?

  • Re: Passaggio di valori fra funzioni

    20/01/2023 - tonyven1 ha scritto:


    Ora funziona in parte. Avevo già provato con successo il metodo che mi hai illustrato. Lo lasciai perdere perchè mi succedeva come mi succede adesso. Memorizzo i dati di ogni singola guardia però quando chiudo il browser e lo riapro nello storage non c'è nulla. Ho paura di avere qualche bug mi sa.

    Scusa ma se il codice funziona, e poi non funziona più, non è che la causa va ricercata nella credenza della cucina, sotto il divano o in Visual Studio Code, bensì nel codice stesso.

    Evidentemente, non hai implementato la cosa come si deve, o hai modificato il codice precedente introducendo nuovi errori, poiché tutte le soluzioni proposte sino ad ora funzionano, garantito.

    Riprendi ad esempio il mio fork alla tua soluzione: se lo storage mantiene i dati e poi da un certo momento in poi non lo fa più dopo che hai cambiato il codice, c'è un errore, è evidente. JavaScript non funziona a fasi alterne o seguendo la luna (anche se a volte può sembrare).

    20/01/2023 - tonyven1 ha scritto:


    Non so come meglio esporre il problema.

    Non devi esporre meglio, devi riportare il codice. E' farraginoso, devi riscriverlo. Ti sei documentato poco: devi studiare ancora. Stai gestendo troppi problemi in uno, prima l'inserimento e poi il salvataggio, facendo confusione o introducendo logica che invalida l'una o l'altra operazione.

    E' inutile continuare a girarci attorno: o si prendono provvedimenti (e nel paragrafo precedente te ne ho indicati diversi), oppure passeremo semplicemente dalla trattazione di un problema a un altro, perché non c'è volontà o capacità di risolvere la questione o di cambiare la metodologia con cui si affronta il problema stesso.

    Non saprei che altro dire.

  • Re: Passaggio di valori fra funzioni

    Ciao. E' l'ultima volta che posto questo argomento dopodichè passo ad altro. Il codice funziona ,nel senso che inserisce i dati nello storage, ma continua a perdere i dati se chiudo e riapro il browser. Probabilmente non so utilizzare Dev Tool di chrome per visualizzare i dati dello storage.

    Questo è il codice:

    https://codepen.io/tonyven/pen/bGjaYGa?editors=1111

    Ho letto e spulciato parecchio in rete a cominciare dalla documentazione ufficiale.

  • Re: Passaggio di valori fra funzioni

    20/01/2023 - tonyven1 ha scritto:


    l codice funziona ,nel senso che inserisce i dati nello storage, ma continua a perdere i dati se chiudo e riapro il browser. Probabilmente non so utilizzare Dev Tool di chrome per visualizzare i dati dello storage.

    Non c'è neanche bisogno di usare i Dev Tool: io ho aperto la pagina che mi hai linkato con i tuoi sorgenti, e vedo subito i dati che ho inserito in precedenza (vedi la sezione evidenziata nella schermata qui sotto).

    Se non riesci a vedere questi dati nel Local Storage, significa che il problema riguarda effettivamente la tua macchina.

    Io spero che tu stia visualizzando la pagina tramite l'uso di un Web Server, e quindi usando il protocollo http:// (che è l'unico modo per indicare un dominio, sia anche localhost, affinché il browser possa sapere quali sono i suoi dati da recuperare, mantenendoli isolati dagli altri), e che tu non stia invece aprendo direttamente la pagina caricandola da file, quindi usando il protocollo file://.

    Osserva la barra degli indirizzi per determinarlo.

  • Re: Passaggio di valori fra funzioni

    Grazie infinite per il supporto. In effetti non ho usato un web server ma solo da file. Proverò con wamp.

    Grazie ancora

  • Re: Passaggio di valori fra funzioni

    21/01/2023 - tonyven1 ha scritto:


    Grazie infinite per il supporto. In effetti non ho usato un web server ma solo da file.

    Allora direi che si spiegano molte cose… :)

    21/01/2023 - tonyven1 ha scritto:


    Proverò con wamp.

    Se usi Visual Studio Code, ti basta l'estensione Live Server, semplice e facile da utilizzare.

  • Re: Passaggio di valori fra funzioni

    Ciao. Mi dispiace disturbare in continuazione ma mi blocco sempre sui fondamentali. Dunque ho un codice che dovrebbe iterare semplicemente su un array. Nell'array ci sono memorizzati degli oggetti presi dal localstorage. Quello che vorrei fare è estrarre un valore del localstorage anche se ce ne sono per esempio 4. Questo il codice:

    function recupera(){
    
       
       dbGuardia.push(localStorage.getItem('guardie'));
      
       document.getElementById('mod').innerHTML=dbGuardia;
    }

    Ho provato a implementare un ciclo for senza avere risultati. O meglio con un ciclo for mi tira fuori tutti gli elementi di localstorage. Ho provato ad accedere ad un elemento dell'array e risulta pieno solo il primo elemento se vado sull'elemento [1] mi dice ‘undefinided’. Ma come mai? Ho letto la destrutturazione di un array ma forse con gli oggetti è diverso? Poi ho un dubbio se è legittimo inserire in array degli oggetti ma so che si puo' fare.

  • Re: Passaggio di valori fra funzioni

    22/01/2023 - tonyven1 ha scritto:


    Mi dispiace disturbare in continuazione ma mi blocco sempre sui fondamentali.

    Il problema non è disturbare, il problema è che quando ci si blocca sempre sui fondamentali, significa che questi vanno studiati prima di andare oltre.

    22/01/2023 - tonyven1 ha scritto:


    Dunque ho un codice che dovrebbe iterare semplicemente su un array. Nell'array ci sono memorizzati degli oggetti presi dal localstorage. Quello che vorrei fare è estrarre un valore del localstorage anche se ce ne sono per esempio 4. Questo il codice: […]

    Nel tuo codice non c'è nessuna iterazione. Oltre a questo, la parte di codice che hai postato è completamente sbagliata su tutti i fronti:

    function recupera(){
      dbGuardia.push(localStorage.getItem('guardie'));
      document.getElementById('mod').innerHTML=dbGuardia;
    }

    Spiego perché. Il metodo push() serve per inserire un elemento, o più elementi separati da virgola, all'interno dell'array di riferimento (dbGuardia). Nel tuo caso quindi, stai recuperando un array di guardie dal Local Storage e lo stai inserendo come primo elemento dell'array dbGuardia. Avrai quindi un “array come primo elemento di un altro array”, e ovviamente non è ciò che vorresti.

    Se vuoi avere in dbGuardia l'array dei dati precedentemente salvati, basterebbe scrivere questo e basta:

    dbGuardia = localStorage.getItem('guardie');

    Anche la seconda riga è errata, perché dbGuardia è un array e impostarlo come testo su un elemento tramite innerHTML non visualizzerà nulla di significativo.

    22/01/2023 - tonyven1 ha scritto:


    Ho provato ad accedere ad un elemento dell'array e risulta pieno solo il primo elemento se vado sull'elemento [1] mi dice ‘undefinided’. Ma come mai?

    Vedi la spiegazione sopra. Ma ripeto: sono i fondamentali del linguaggio e della costruzione di una basilare logica di JavaScript. Se non si apprendono questi concetti di base, inutile imbarcarsi su qualcosa di più complesso. Occorre apprendimento ed esercizio.

    22/01/2023 - tonyven1 ha scritto:


    Ho letto la destrutturazione di un array ma forse con gli oggetti è diverso?

    Nessuna delle problematiche che riscontri dipende da questo. Stai ricercando su tecniche complesse le cause di errori che invece hanno una spiegazione più semplice e immediata (vedi sopra).

    22/01/2023 - tonyven1 ha scritto:


    Poi ho un dubbio se è legittimo inserire in array degli oggetti ma so che si puo' fare.

    Come fai ad avere questo dubbio? E' forse l'unica cosa corretta che è stata fatta sino ad ora, prima con le stringhe JSON delle guardie, poi sostituendola con gli oggetti e i dati stessi delle guardie.

  • Re: Passaggio di valori fra funzioni

    Ciao. Il codice ,grazie ai tuoi consigli ora funziona. Ho una domanda da 1 milione di dollari. Perchè le variabili dichiarate fuori dalle funzioni non sono visibili all'interno delle funzioni? Ho letto e riletto lo scope delle variabili e ho visto che per dichiararle globali vanno dichiarate all'esterno delle funzioni, ma quando le richiamo all'interno delle funzioni non sono visibili. Dico delle variabili ma ho provato anche con array e  oggetti. Scusa la domanda banale ma sto diventando stupido per questo. Non posto il codice perchè credo che la questione sia così basilare che mi sfugge qualcosa. Grazie

  • Re: Passaggio di valori fra funzioni

    27/01/2023 - tonyven1 ha scritto:


    Perchè le variabili dichiarate fuori dalle funzioni non sono visibili all'interno delle funzioni?

    Le variabili dichiarate fuori dalle funzioni SONO visibili all'interno.

    Se definisci una variabile globale e una funzione che ne stampa il valore, e vai a invocare tale funzione, il valore sarà quello atteso.

    var dummy = 123;
    
    function print() {
      alert(dummy); // la variabile è visibile!
    }
    
    print();
  • Re: Passaggio di valori fra funzioni

    Ciao. Perchè allora su questo codice non mi legge l'array dbGuardia? Se lo metto dentro la funzione lo legge. Se lo metto fuori non lo legge:

    let nome;
    let cognome;
    let indirizzo;
    let telefono;
    let dbGuardia=[];
     
    function insGuardia(){
      
      nome =document.getElementById("nom").value;
       cognome=document.getElementById("cogn").value;
      indi=document.getElementById("ind").value;
     telefono=document.getElementById("tel").value;
    
       let guardia={'nome':nome,'cognome':cognome,'indirizzo':indi,'telefono':telefono};
       
      dbGuardia.push(JSON.stringify(guardia));
    
      localStorage.setItem('guardie',dbGuardia);
      document.getElementById("vis1").innerHTML =localStorage.getItem('guardie')+"<br>";
      document.getElementById('vis1').innerHTML=dbGuardia;
      
    }

    Ho provato anche con le variabili nome,cognome,indirizzo,telefono e funziona allo stesso modo. Non capisco. C'è qualche bug?

  • Re: Passaggio di valori fra funzioni

    28/01/2023 - tonyven1 ha scritto:


    Ciao. Perchè allora su questo codice non mi legge l'array dbGuardia? Se lo metto dentro la funzione lo legge. Se lo metto fuori non lo legge […]

    Leggi questo articolo.

    In ogni caso, variabili che non fanno parte di una struttura dati (esiste anche la programmazione a oggetti) o che sono globali, o che non vengono passate come parametri sono da evitare in ogni caso.

  • Re: Passaggio di valori fra funzioni

    Ciao. Non finiro' mai di ringraziarti per il supporto. Ora mi è un pò piu' chiaro e sopratutto funziona.

  • Re: Passaggio di valori fra funzioni

    Ciao. Stavo smanettando sempre con il localStorage e mi sono accorto che quando uso localStorage.setItem() ogni volta che inserisco un nuovo valore viene sovrascritto su quello vecchio, quindi nel localStorage mi ritrovo sempre e solo un valore. Vorrei invece avere tutti i valori che inserisco. E' normale questo comportamento?

  • Re: Passaggio di valori fra funzioni

    01/02/2023 - tonyven1 ha scritto:


    Stavo smanettando sempre con il localStorage e mi sono accorto che quando uso localStorage.setItem() ogni volta che inserisco un nuovo valore viene sovrascritto su quello vecchio, quindi nel localStorage mi ritrovo sempre e solo un valore. Vorrei invece avere tutti i valori che inserisco. E' normale questo comportamento?

    Ne abbiamo già parlato: leggi questa risposta data all'inizio del thread.

    La chiamata al setItem() assegna a una chiave un valore: se si assegna alla stessa chiave un nuovo valore, questo viene perduto, ovviamente.

    Nell'implementazione si era detto che il valore da salvare - che deve essere una stringa - è la conversione in formato JSON dell'array dei dati delle guardie.

    Ne conseguono questi principi.

    1. Non devi salvare una singola guardia nel Local Storage, ma più guardie.
    2. I dati delle guardie li inserisci in un array che li contiene tutti, chiamando il metodo push().
    3. Quando devi salvare i dati delle guardie, converti l'array intero in formato JSON usando il metodo JSON.stringify() passando ovviamente l'array come parametro.
    4. Quando accedi alla pagina, devi recuperare l'intero array delle guardie dal Local Storage, leggendo la stringa associata alla chiave usata precedentemente in setItem() e convertendo tale stringa JSON nel corrispondente array dei dati delle guardie passandolo al metodo JSON.parse().

    Riassumendo comunque in due parole, quando usi il Local Storage, il dato da salvare è l'array delle guardie, non la guardia singola, come ribadito nel resto del thread.

Devi accedere o registrarti per scrivere nel forum
40 risposte