2014-02-18 96 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中時,改變你的存儲邏輯[]。