2014-02-18 98 views
0

我正在尝试使用javascript来模拟会话。大多数情况下,将用户凭证保存到LocalStorage中,并与之后的数组进行比较。 我越来越对var oStoredCredentials = JSON.parse(localStorage.savedCredentials);线路输入的意外的结束,我无法找到答案.. 这是整个代码块:意外的输入结束(javascript和JSON)

$(document).on("click", ".submitBtnLog", function(){ 
     var sUsername = $("#LoginName").val(); 
     var sPassword = $("#LoginPassword").val(); 

    for(var i=0; i< aEmployees.length; i++){ 
     if(sUsername == aEmployees[i].username && sPassword == aEmployees[i].password){ 
      login = true;     
      var sUsername = aEmployees[i].username; 
      var sPassword = aEmployees[i].password; 
      var oCredentials = {"savedUsername":sUsername,"savedPassword":sPassword}; 
      var sCredentials = JSON.stringify(oCredentials); 
      localStorage.savedCredentials = sCredentials; 

     } 
    } 
}); 
/*CHECK IF USER HAS ALREADY STARTED A "SESSION"*******************************************************************************/ 

if (localStorage.getItem("savedCredentials") === null) { 
    localStorage.savedCredentials = []; 
}else{ 
    var oStoredCredentials = JSON.parse(localStorage.savedCredentials); 
    //console.dir(oStoredCredentials.savedUsername) 
    for(var i=0; i< aEmployees.length; i++){ 
     if(oStoredCredentials.savedUsername==aEmployees[i].username && oStoredCredentials.savedPassword==aEmployees[i].password){ 
      login = true; 
     } 

    if(login === true){ 
        var BoxHtml="Welcome "+aEmployees[i].name +" "+aEmployees[i].surname; 
        $("#Navigation").css({"display":"block"}); 
        $("#LoginContainer").html(BoxHtml); 
    }else{ 
     console.log(error); 
      }; 
    }; 
}; 
+0

什么是'localStorage.savedCredentials'?你能确认JSON真的吗? –

+0

是的。我将用户输入的用户名和密码保存到一个变量中,我将它串化并将其保存到本地存储 –

+0

我明白了,但如果由于某种原因出错,第二次调用读取localStorage将失败,事关你的尝试。这个问题只是为了评估问题的位置。 –

回答

0

我创建了一个如何使用localStorage

这里工作的一些简单的代码是我HTML代码:

<input id="LoginName" /> 
<input id="LoginPassword" /> 
<input id="submitBtnLog" type='button' value="Submit" /> 
<input id='btnGetLocalStorage' type='button' value='Get Local Storage' /> 

这是我的Javascript代码:

var Credentials = { 
    sUsername: '', 
    sPassword: '' 
} 

$('#submitBtnLog').click(function(){ 
    Credentials.sUsername = $("#LoginName").val(); 
    Credentials.sPassword = $("#LoginPassword").val(); 
    localStorage.setItem('savedCredentials', JSON.stringify(Credentials)); 

}); 

$('#btnGetLocalStorage').click(function(){ 
    if(localStorage.getItem('savedCredentials') != null){ 
     var oStoredCredentials = JSON.parse(localStorage.getItem('savedCredentials'));  
     alert('Username = ' + oStoredCredentials.sUsername + ' Password = ' + oStoredCredentials.sPassword); 
     localStorage.removeItem('savedCredentials') 
    } 
}); 

如果您需要额外的帮助,请让我知道有关如何使用本地存储的信息。

0

我设法重现您的问题。它接缝localStorage.savedCredentials存储空数组,而不是字符串化的对象,因为localStorage.savedCredentials = [];行。

您应该仔细检查您的代码并确保localStorage.savedCredentials始终符合您的期望。

+0

我找到了问题。显然它没有设置一个空数组,而是一个空值。而不是保存括号,它只是节省空间。它工作正常,如果我说localStorage.savedCredentials =“[]”; –

0

当您的localStorage为空时,您正在存储[]。所以,当其他部分开始执行时,它需要[]作为要解析的值,并且发现它很困难。当它存在于localStorage中时,改变你的存储逻辑[]。