Visualizzazione risultati 1 fino 16 di 16

Discussione: Local Storage memorizza male i dati

  1. #1
    Guest

    Question Local Storage memorizza male i dati

    Ciao a tutti, è un problema un pò strano, ma a quanto pare il local storage mi memorizza i dati in maniera caotica e non funziona a dovere.
    Meglio che parto dal principio.
    Allora io sto facendo un sito per mobile di un sito già esistente ma che fa vedere solo alcune informazioni.
    Il sito è di risultati sportivi
    la home fa vedere i campionati in essere, e quando si clicca su di un campionato, si entra nelle competizioni con le diverse gare.
    Il problema è quando aggiorno la pagina delle competizioni, dato che è una pagina dinamica, si dovrebbe aggiornare con i dati correnti e, con il local storage, i dati dovrebbero essere visibili e persistenti nella pagina.... e qui nasce il problema.
    Quando clicco sul campionato entro nelle competizioni, che se le aggiorno spariscono.
    Devo dire che per fare questa pagina ho usato una funzione locale, e da lì ho pensato che fosse quello il problema, invece quando ho fatto una funzione globale, e son andata a richiamare il local storage con i dati memorizzati, mi ha fatto apparire solo una ed una sola competizione, qualsiasi campionato selezionassi.
    Quindi ho voluto vedere cosa memorizzava il LS ed Ecco cosa memorizza:

    Codice:
    0: {"Competition_ID":"1","Competition_Name":"Elitserien 2012","Competition_ShortName":"Elitserien 2012","Competition_Gender":"Men","Competition_Matches":"2","Competition_Phases":[{"Type":"Phase","Phase_ID":"1","Phase_Name":"Small Country Division","Phase_ShortName":"SMD"},{"Type":"Pool","Pool_ID":"1","Pool_Name":"Pool A","Pool_Matches":"2"},{"Type":"Pool","Pool_ID":"2","Pool_Name":"Pool B","Pool_Matches":""},{"Type":"Phase","Phase_ID":"2","Phase_Name":"Small Country Division","Phase_ShortName":"SMD"},{"Type":"Pool","Pool_ID":"1","Pool_Name":"Pool A","Pool_Matches":"2"},{"Type":"Pool","Pool_ID":"2","Pool_Name":"Pool B","Pool_Matches":""}]}
    4: 4
    5: 5
    2: {"Competition_ID":"3","Competition_Name":"LIGA 2012","Competition_ShortName":"Elitserien 2012","Competition_Gender":"Men","Competition_Matches":"2","Competition_Phases":[{"Type":"Phase","Phase_ID":"1","Phase_Name":"Small Country Division","Phase_ShortName":"SMD"},{"Type":"Pool","Pool_ID":"1","Pool_Name":"Pool A","Pool_Matches":"2"},{"Type":"Pool","Pool_ID":"2","Pool_Name":"Pool B","Pool_Matches":""}]}
    3: 3
    1: {"Competition_ID":"2","Competition_Name":"LIGACUPEN 2012","Competition_ShortName":"Elitserien 2012","Competition_Gender":"Men","Competition_Matches":"2","Competition_Phases":[{"Type":"Phase","Phase_ID":"1","Phase_Name":"Small Country Division","Phase_ShortName":"SMD"},{"Type":"Pool","Pool_ID":"1","Pool_Name":"Pool A","Pool_Matches":"2"}]}
    E' un file json con id sparsi ed alcuni campi vuoti.

    il codice della funzione globale è questa:
    Codice:
    $(document).bind("pagechange", function (event,  data){
    		
    		
        	var page = $.mobile.activePage[0].id;//dichiarazione di variabile che fa riferimento alla pagina attiva
    			
    			if (page == 'competition') {
    				
    				
    				
    
    for (var j = 0; j < localStorage.length; j++) {
    		
    					
    		var c = JSON.parse(localStorage.getItem(localStorage.key(j)));
    		
    		
    			
    	$.ajax ({
    							type: "POST",
    							url: "competitions_phases.json",
    							dataType: "json",
    							
    							success: function(data, textStatus, jqXHR){
        		 		
    					
    										
    				      			
    					
    								for (var i=0; i < data.Competition.length; i++){
    									
    									localStorage.setItem(i, JSON.stringify(data.Competition[i]));
    									
    									 
    									var comp = data.Competition[i];
    									
    									
    									if(c.Competition_ID == comp.Competition_ID){
    									
    						
    								
    								var res ='<a class="ui-btn-left ui-btn ui-btn-icon-notext ui-btn-corner-all ui-shadow ui-btn-up-c" href="#home"  data-role="button" data-icon="home" title=" Home ">';
    							res +='<span class="ui-btn-inner ui-btn-corner-all"> <span class="ui-btn-text" > Home </span><span data-form="ui-icon" class="ui-icon ui-icon-home ui-icon-shadow"></span></span></a>';
    							res +='<div class="ui-header ui-bar-c" data-swatch="c" data-theme="c" data-form="ui-bar-c" ><h1 class="ui-title" >competizione '+comp.Competition_ID+' '+comp.Competition_Name+'</h1></div>';
    					
    						
    							var res2 = '<ul data-role="listview" id="newlist" data-position="in-line" data-theme="c"   >';
    							for (var y=0; y<comp.Competition_Phases.length; y++){
    								
    							var phase= comp.Competition_Phases[y];
    							if (phase.Type == "Phase"){
    								
    							res2 += ' <li data-role="list-divider" data-swatch="a" data-theme="a" data-form="ui-bar-a">' + phase.Phase_Name+'</li>';}
    							else {
    								
    							
    										
    							res2 += '  <li data-form="ui-btn-up-a"><a href="#">'+phase.Pool_Name+'</a></li>';
    								
    							}
    							}
    							res2 += '</ul>';
    						
    					   		
    						
    						//z='';
    					
    								
    					
    										
    								
    							$('#header').empty();
    							$('#competition-pool').empty();
    							$('#header').prepend(res);
    					    	
    							
    							$("#competition-pool").prepend(res2);
    							
    							$("#newlist").listview();
    				
    							}
    								}
    			
        	},
    				
    		error: function (jqXHR, textStatus, errorThrown){
    			alert(textStatus);
    	
    	
    		}
    		
    						
    		
    	});
    	
    					
    					}
    	
    			
    				
    	
    }
    		
    });
    C'è qualcuno che mi sa aiutare urgentemente?
    cosa sbaglio?
    se c'è bisogno anche dell'altra parte di codice ditemi...

    Grazie a tutti
    Rox
    Ultima modifica di karl94 : 16-10-2013 alle ore 21.38.02

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Puoi indicare l'indirizzo della pagina in questione?

  3. #3
    Guest

    Predefinito

    non è online... grazie per la correzione del messaggio... :)
    ma posso pubblicare il resto
    Ultima modifica di partitodelcuore : 16-10-2013 alle ore 22.17.52

  4. #4
    Guest

    Predefinito

    per ora ho caricato un pò alla rinfusa...(per ora non riesco ad adattarlo al sistema, ma da me è un pò differente esteticamente) questo è il link
    http://partitodelcuore.altervista.or...nt/index2.html
    selezionando il campionato se ne vede solo uno... gli altri non li vede, in quanto sul local storage appare memorizzato come ho già illustrato nel post precedente
    fatemi sapere
    grazie a tutti
    Rox

  5. #5
    Guest

    Predefinito

    Ciao ... grazie per avermi prestato attenzione... per fortuna che una parte di problema l'ho risolta da me... comunque ho ancora problemi per la persistenza dei dati... qualcuno mi può aiutare?
    grazie...
    Rox

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Probabilmente nessuno ti ha risposto perché a nessuno va di perdere un sacco di tempo per leggersi tutto quel codice formattato male. Tiraci fuori le righe dove salvi/carichi dal LocalStorage.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    Guest

    Predefinito

    Ciao Saltfainder... grazie per avermi detto qualcosa...
    ho rivisto un pò il codice, che qui di seguito segnalo, mettendo dei commenti per evidenziare i punti da te richiesti
    Codice:
    // VISUALIZZAZIONE DELLA PRIMA PAGINA
    $(document).bind("pageshow", function visualizza(){
    	
    	$.ajax ({
    		type: "POST",
    		contentType:"application/json; charset=utf-8",
    		url: "competitions.json",
    		dataType: "json",
    		async: true,
    			
    		success: function(data, textStatus, jqXHR){
    			
    			var L='0';
    			var res = '<ul data-role="listview" id="elenco">';
    				
    			for (var i=0; i < data.Competition.length; i++){
    				//MEMORIZZAZIONE DEI DATI DEL FILE JSON NEL LOCALSTORAGE CON DISTINZIONE DI CHIAVE
    				localStorage.setItem("a"+i, JSON.stringify(data.Competition[i]));
    				
    				var comp = data.Competition[i];
    				z=comp.Competition_ID;
    			
    					if ((i % 2) == 0){
    						
    					
    									res +='<li data-theme="a"><a href="#competition?id=' +i  + '" onclick="Selezione('+z +')">'+comp.Competition_Name+'<p class="ui-li-aside"><b>'+comp.Competition_Matches+'</b></p>';
    				
    				
    				
    										if(comp.Competition_Matches!=""){
    																		L="si";
    																		}
    									}else {
    											res +='<li data-theme="b"><a href="#competition?id=' + i + '" onclick="Selezione('+z +')">'+comp.Competition_Name+'<p class="ui-li-aside"><b>'+comp.Competition_Matches+'</b></p>';
    											if(comp.Competition_Matches!=""){
    																			L="si";
    																			}
    											} 
    					
    									
    										res += '</a></li>';
    										}
    			
    									res += '</ul><div class="clear"><hr></div>';
    			
    			
    			
    									$("#contenitore").empty();
    									$("#contenitore").prepend(res);
    			
    									$("#elenco").listview();
    									if (L=="si"){
    									$("#live").fadeIn('slow');
    			
    								}
    						},
    						error: function (jqXHR, textStatus, errorThrown){
    						alert(textStatus);
    						}
    				});
    				return false;
    		});
    
    
    
    	
    				
    			
    				
    			
    			
    	//FUNZIONE INVIO VARIABILE Z PER VISUALIZZARE PAGINA CLICCATA		
    	function Selezione(z){	
    				
    				for (var j = 0; j < localStorage.length; j++) {
    				
    					
    				
    				//RECUPERO DATI DAL LOCAL STORAGE
    				var c = JSON.parse(localStorage.getItem(localStorage.key(j)));
    				
    				if(c.Competition_ID==z){
    					var newc=c.Competition_ID;//ASSEGNAZIONE AD UNA VARIABILE DEL VALORE RECUPERATO DAL LOCALSTORAGE
    				//alert(z);
    						$.ajax ({
    							type: "GET",
    							url: "competitions_phases.json",
    							dataType: "json",
    							
    							success: function(data, textStatus, jqXHR){
        		 						for (var i=0; i < data.Competition.length; i++){
    									
    									//MEMORIZZAZIONE DATI NEL LOCALSTORAGE DEI CAMPI DEL JSON COMPETITION_PHASES
    										localStorage.setItem(i, JSON.stringify(data.Competition[i]));
    										var comp = data.Competition[i];
    										
    											if(z == comp.Competition_ID && z ==newc ){
    												
    												var res ='<a class="ui-btn-left ui-btn ui-btn-icon-notext ui-btn-corner-all ui-shadow ui-btn-up-c" href="#home"  data-role="button" data-icon="home" title=" Home ">';
    													res +='<span class="ui-btn-inner ui-btn-corner-all"> <span class="ui-btn-text" > Home </span><span data-form="ui-icon" class="ui-icon ui-icon-home ui-icon-shadow"></span></span></a>';
    													res +='<div class="ui-header ui-bar-c" data-swatch="c" data-theme="c" data-form="ui-bar-c" ><h1 class="ui-title" >competizione '+comp.Competition_ID+' '+comp.Competition_Name+'</h1></div>';
    					
    												var res2 = '<ul data-role="listview" id="newlist" data-position="in-line" data-theme="c"   >';//MEMORIZZAZIONE IN DUE STRINGHE DIFFERENTI I DIFFERENTI LIVELLI DEI CAMPI
    													for (var y=0; y<comp.Competition_Phases.length; y++){
    														var phase= comp.Competition_Phases[y];
    															if (phase.Type == "Phase"){
    																				res2 += ' <li data-role="list-divider" data-swatch="a" data-theme="a" data-form="ui-bar-a">' + phase.Phase_Name+'</li>';} 
    																				else {
    																				res2 += '  <li data-form="ui-btn-up-a"><a href="#pool">'+phase.Pool_Name+'</a></li>';
    								
    																						}
    									
    														}//CHIUSURA FOR
    													res2 += '</ul>';
    						
    											}//CHIUSURA IF
    					
    										
    								
    							$('#header').empty();
    							$('#competition-pool').empty();
    							$('#header').prepend(res);
    					    	
    							$("#competition-pool").prepend(res2);
    							
    							$("#newlist").listview();
    				
    							}//CHIUSURA FOR
    			
        	},
    				
    		error: function (jqXHR, textStatus, errorThrown){
    			alert(textStatus);
    	
    	
    		}
    		
    						
    		
    	});//CHIUSURA AJAX
    	} //CHIUSURA IF
    	}//CHIUSURA CICLO LOCALSTORAGE
    	
    }
    Dalla seconda funzione, io riesco a visualizzare i dati, ma se aggiorno la pagina il contenuto scompare...
    come faccio a far restare i dati in persistenza nella seconda pagina?
    forse il problema è che faccio il confronto di due file json distinti?
    grazie... spero che sia più chiaro ora
    Rox
    Ultima modifica di partitodelcuore : 29-10-2013 alle ore 18.19.50

  8. #8
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Per esaminare il contenuto del LocalStorage puoi usare, per esempio, gli strumenti di sviluppo di Chrome: SHIFT+CTRL+I > Risorse. Così intanto verifichi cosa è stato salvato esattamente.

    Comunque nel tuo codice c'è:

    Codice:
    localStorage.setItem(i, JSON.stringify(data.Competition[i]));
    Dove i sono degli indici numerici, cosa che poi effettivamente hai riportato nel primo post e sembrava che non ti andasse bene, per cui non capisco bene cosa vuoi fare perché in un altro punto mi sembra fatto diversamente.

    Poi quando li tiri fuori usi questo codice un po' contorto:

    Codice:
    var c = JSON.parse(localStorage.getItem(localStorage.key(j)));
    Il metodo key() ti tira fuori il nome dell'n-esimo campo, però se usi già dei valori numerici tanto vale richiamarli direttamente.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da saitfainder Visualizza messaggio

    Poi quando li tiri fuori usi questo codice un po' contorto:

    Codice:
    var c = JSON.parse(localStorage.getItem(localStorage.key(j)));
    Il metodo key() ti tira fuori il nome dell'n-esimo campo, però se usi già dei valori numerici tanto vale richiamarli direttamente.
    Hai ragione... come posso fare? cosa suggeriresti?
    infatti quando vado a richiamare la chiave, mi da l'ultimo campo...

    Grazie Saitfainder per la tua pazienza:=)

  10. #10
    Guest

    Predefinito

    Codice:
    var c = JSON.parse(localStorage.getItem(localStorage.key(j)));
    al posto del secondo localStorage.key(j) ho messo solo l'indice... ma mi da sempre n-esimo indice...
    per avere quello corrente come faccio?

    grazie di tutto
    Rox

  11. #11
    Guest

    Predefinito

    in realtà, pensandoci bene la domanda non è quella giusta...
    allora vediamo se riesco a spiegarmi...
    Come posso inviare una variabile che memorizza l'id della pagina selezionata, ad una funzione globale?
    grazie ancora
    Rox

  12. #12
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Glielo passi come parametro, no?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  13. #13
    Guest

    Predefinito

    Si, lo invio come parametro, per la funzione locale, che lo vede, e la pagina linkata appare correttamente, ma il problema è la persistenza dei dati.
    Quando invece il parametro lo richiamo nella funzione globale, lo vede come variabile globale, e viene considerato l'ultimo ID dei campi.. e mi appaiono i dati dell'ultima pagina, ed in questo caso i dati persistono...
    come faccio a passare il parametro alla funzione globale?
    spero d'essermi spiegata...
    :(
    Ultima modifica di partitodelcuore : 31-10-2013 alle ore 18.35.32

  14. #14
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Se passi un parametro ad una funzione, a prescindere dove si trovi, non puoi vedere una variabile globale con lo stesso nome. C'è qualcosa che non va nel tuo codice.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  15. #15
    Guest

    Predefinito

    grazie... per non avermi detto nulla...
    anch'io sospetto, e da mo', che ci sia qualcosa che non va nel mio codice... se no non starei qui a chiedere... e ad avere delle "non risposte" alle mie domande

    ditemi che non ne avete voglia o nn sapete che fare...

    Scusa se son dura, ma mi aspetterei delle risposte più articolate da un senior.

    Io sarò una neofita è vero, e non me ne vergogno, ma un comportamento così d'elite da parte di chi dovrebbe aiutare, è assurdo... anche se a te le domande sembreranno stupide, non puoi trattare gli utenti con sufficienza.

    Grazie ancora del nulla

  16. #16
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Vabbé, se devi far polemica tanto vale finirla qui. Io sto cercando di capire che diavolo hai fatto nel limiti del tempo che ho a disposizione per questo genere di cose. Se ti va di aiutarmi in questo compito bene, altrimenti devi risolvere il tuo problema da te, visto che non si tratta neanche di un aspetto legato al servizio che offriamo ma di un tuo codice. In ogni caso non mi posso mettere a spulciare le 100 righe di codice che hai incollato nel primo post, ma ti posso dare dei suggerimenti su cosa provare a guardare. E visto che a questo punto ci sono delle cose che non hanno senso per come le hai raccontate non so che dirti.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •