Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema con JSON.parse

Estas en el tema de Problema con JSON.parse en el foro de Javascript en Foros del Web. Hola, me estoy tirando de los pelos porque no sé por qué falla esto. El problema está aquí: Código: localStorage.cr = (localStorage.cr || "0.00"); localStorage.memoria ...
  #1 (permalink)  
Antiguo 10/11/2014, 11:35
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Problema con JSON.parse

Hola, me estoy tirando de los pelos porque no sé por qué falla esto. El problema está aquí:

Código:
localStorage.cr = (localStorage.cr || "0.00");
    localStorage.memoria = (localStorage.memoria || "[]");    
    var t, cl = $("#crono");
    var listado_marcas = JSON.parse(localStorage.memoria)
El script no se ejecuta si intento hacerle el parse a localStorage.memoria, pero si lo cambio, por ejemplo, por el .cr sí que funciona.

Dejo el resto del código por si el fallo está en otro lado... pero entonces no entiendo por qué cambiando .memoria por .cr funciona perfectamente.

Código:
<!DOCTYPE html>
<html>
<head><title>Event Example</title><meta charset="UTF-8">
<script type="text/javascript" src="zepto.min.js" > </script>
<script type="text/javascript">
  $(function(){ 
    localStorage.cr = (localStorage.cr || "0.00");
    localStorage.memoria = (localStorage.memoria || "[]");    
    var t, cl = $("#crono");
    var listado_marcas = JSON.parse(localStorage.memoria)

    function incremento() {localStorage.cr = +localStorage.cr + 0.01}
    function mostrar()  { cl.html((+localStorage.cr).toFixed(2));};
    function arrancar() { t=setInterval(function() {incremento(); mostrar()}, 10);};
    function parar()    {  clearInterval(t); t=undefined } 
    function marcador() { if ($('#crono') != undefined) {
    	listado_marcas.push($("#crono").html());
    var i, marcas = "";
    for (i = 0; i < listado_marcas.length; ++i) {
    marcas += "<ol>" + listado_marcas[i] + " segundos</ol>";
    $("#marcas").html(marcas);}
}
    else {listado_marcas = ""}
    }; 
    function cambiar()  { if (!t) arrancar(); else {parar(); marcador()} };

    $("#cambiar").on('click', cambiar);
    $("#inicializar").on('click', function(){ if (t) {mostrar} else {localStorage.cr = "0.00"; $("#marcas").html(""); localStorage.memoria = (localStorage.memoria || "[]"); mostrar()}});
    mostrar();
  });
</script>
</head>
<body>
<h2>Cronómetro</h2>

<h2><span id="crono"> 0.0 </span> segundos </h2>

<button type="button" id="cambiar"> arrancar/parar </button>
<button type="button" id="inicializar">  inicializar </button>
<div id="marcas"></div>
</body>
</html>
Gracias, un saludo y buen foro.
  #2 (permalink)  
Antiguo 11/11/2014, 05:14
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 10 años, 9 meses
Puntos: 9
Respuesta: Problema con JSON.parse

¿Qué tienes en localStorage.memoria?
  #3 (permalink)  
Antiguo 11/11/2014, 06:47
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Problema con JSON.parse

Mi intención era meter lo que se guardaba en lla variable "listado de marcas". Me di cuenta de que de esa manera no lo conseguía. Así que lo hice de esta otra manera (lo dejo por si a alguien le sirve)

Código:
<script type="text/javascript">
  $(function(){ 
    localStorage.cr = (localStorage.cr || "0.00");
    var t, cl = $("#crono");
    var listado_marcas = [];

    function incremento() {localStorage.cr = +localStorage.cr + 0.01}
    function mostrar()  { cl.html((+localStorage.cr).toFixed(2));};
    function arrancar() { t=setInterval(function() {incremento(); mostrar()}, 10);};
    function parar()    {  clearInterval(t); t=undefined } 
    function marcador() { if ($('#crono') != undefined) {
    	listado_marcas.push($("#crono").html());
    var i, marcas = "";
    for (i = 0; i < listado_marcas.length; ++i) {
    marcas += "<ol>" + listado_marcas[i] + " segundos</ol>";
    $("#marcas").html(marcas);
    localStorage["listado_marcas"]=JSON.stringify(marcas) }
}
    else {listado_marcas = ""}
    }; 
    function cambiar()  { if (!t) arrancar(); else {parar(); marcador()} };

    $("#cambiar").on('click', cambiar);
    $("#inicializar").on('click', function(){ if (t) {mostrar} else {localStorage.cr = "0.00"; $("#marcas").html(""); listado_marcas = []; mostrar()}});
    $("#crono").on('tap', cambiar);
    $("#crono").on('swipe',function(){ if (t) {mostrar} else {localStorage.cr = "0.00"; $("#marcas").html(""); listado_marcas = []; mostrar()}})
    mostrar();
    if (!t) {
        $("#marcas").html("Marcas de la última sesión<br>" + localStorage["listado_marcas"])
    }
    else {
        marcador()
    }
  });
</script>
Es un cronómetro, guardo los momentos en los que lo paras en la variable listado _marcas, que no es más que un array en el que voy pusheando cada marca. Luego a la variable marca le hago un stringify y así ya puedo guardar la lista entera (y no solo cada elemento individual del array de listado_marcas)en localStorage.

Etiquetas: funcion, html, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:20.