У меня есть следующий код: то, что я стараюсь делать, состоит в том, что, когда новый пользователь хочет зарегистрироваться в моем проекте, он должен наполнять формуляр, 3 раза однажды посланный 3 раза только что, реестр будет успешным. По этой причине я использую localStorage
чтобы сохранять данные о первом, втором и третьем отправлении формуляра.
Код, который я представляю в действительности, - абстракция (минимальный, я завершаю и проверяемо) моего реального кода (он был бы много кодом).
Код, что публика не функционирует в SOes (я не знаю, почему), протестируйте это локальным способом пожалуйста.
var nombreAux = "";
var apellidoAux = "";
var dato_G = []; //tiempo de presion y realce
var dato_aux = [];
var iteracion = 0;
$(window).on('load', function () {
$('#add-new-fact').click(function () {
var nombreUser = $('#nom').val();
var passUser = $('#pass').val();
var dato = $('#dato').val();
dato_aux.push(dato);
if (nombreUser != "" && passUser != "") {
/*Guardando los datos en el LocalStorage*/
nombreAux = localStorage.getItem("Nombre");
apellidoAux = localStorage.getItem("contrasena");
// alert(nombreAux+" "+apellidoAux);
if ((nombreAux == "" || apellidoAux == "")) {
localStorage.setItem("Nombre", nombreUser);
localStorage.setItem("contrasena", passUser);
}
nombreAux = localStorage.getItem("Nombre");
apellidoAux = localStorage.getItem("contrasena");
if (((nombreUser != nombreAux || passUser != apellidoAux))) { //cuando es nuevo user
localStorage.setItem("Nombre", nombreUser);
localStorage.setItem("contrasena", passUser);
dato_G.push(JSON.stringify(dato_aux));
localStorage['dato'] = dato_G;
dato = [];
}
if ((nombreUser == nombreAux || passUser == apellidoAux) && (iteracion < 6) && (typeof dato != undefined)) { //cuando ya es un usuario
iteracion++;
if (dato.length > 0) {
dato_G.push(JSON.stringify(localStorage['dato']));
dato_G.push(JSON.stringify(dato_aux));
dato_aux = [];
}
localStorage['dato'] = dato_G;
}
alert(localStorage['dato']);
location.reload();
if (iteracion == 3) {
//por medio de ajax recien envio los datos para su registro en la BD
}
return false;
}
alert(localStorage['dato']);
nombreUser = "";
passUser = "";
});
});
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="main.js"></script>
</head>
<body>
<input id="nom" type="text" placeholder="nombre">
<input id="pass" type="text" placeholder="pass">
<input id="dato" type="text" placeholder="dato">
<a href="#" id="add-new-fact" >enviar</a>
</body>
</html>
Результат производит мне один array
"зараженный" или с мусором, похожий на нижний screenshot:
Я хотел бы остаться только с arrays
. Будет возможно?
Заметь: по мере того, как оно введено array
он наполняется большим количеством мусора.
Как предотвращать этот мусор? Почему он производится?
Честно, я страдаю морской болезнью немного пробуя интерпретировать код, а следовательно я напечатаю частичный ответ, надеясь, что он подает тебя.
Проблема состоит в том, что ты используешь JSON.stringify()
на переменной, которая уже является JSON, а следовательно он заканчивает тем, что убегает символы больше одного раза.
Чтобы это решать, манипулировали стоимостью dato
, не пробуй превращать это / в JSON в главную часть твоего кода, манипулируй этим как объект, не конвертируя этого. И, потом, превращение было бы сделано только в момент сохранения или чтения localStorage.
function recuperarDato(clave) {
return JSON.parse(localStorage.getItem(clave));
}
function guardarDato(clave, objeto) {
localStorage.setItem(clave, JSON.stringify(objeto));
}
Так, чтобы сохранять:
guardarDato("dato", dato_G);
И чтобы это читать:
dato_G = recuperarDato("dato");
чтобы решать мою проблему я был должен использовать JSON.stringify
и JSON.parse
, и я не схватил только JSON.stringify()
как postee в вопросе.
var nombreAux = "";
var apellidoAux ="";
var dato_G= []; //tiempo de presion y realce
var dato_aux=[];
var iteracion=0;
$(window).on('load', function() {
$('#add-new-fact').click(function() {
var nombreUser = $('#nom').val();
var passUser = $('#pass').val();
var dato = $('#dato').val();
dato_aux.push(dato);
if(nombreUser!="" && passUser!=""){
/*Guardando los datos en el LocalStorage*/
nombreAux = localStorage.getItem("Nombre");
apellidoAux = localStorage.getItem("contrasena");
// alert(nombreAux+" "+apellidoAux);
if((nombreAux==""||apellidoAux=="")){
localStorage.setItem("Nombre", nombreUser);
localStorage.setItem("contrasena", passUser);
}
nombreAux = localStorage.getItem("Nombre");
apellidoAux = localStorage.getItem("contrasena");
if(((nombreUser!=nombreAux || passUser!=apellidoAux))){//cuando es nuevo user
localStorage.setItem("Nombre", nombreUser);
localStorage.setItem("contrasena", passUser);
dato_G.push(JSON.stringify(dato_aux));
localStorage['dato']=JSON.stringify(JSON.parse(dato_G));
dato=[];
}
if((nombreUser==nombreAux || passUser==apellidoAux) && (iteracion<3) &&(typeof dato!=undefined) ){//cuando ya es un usuario
iteracion++;
if(dato.length>0){
dato_G.push(localStorage['dato']);
dato_G.push(JSON.stringify(dato_aux));
dato_aux=[];
}
localStorage['dato']=dato_G;
}
alert(localStorage['dato']);
location.reload();
if(iteracion==3){
alert("enviando");
//por medio de ajax recien envio los datos para su registro en la BD
}
return false;
}
alert(localStorage['dato']);
nombreUser="";
passUser="";
});
});