Не удается получить информацию о пользователе сразу после ввода в indexedDB

У меня есть регистрационная форма с indexedDB. У меня работает resgister/log in. Я пробовал разные вещи, чтобы получить новую регистрацию для входа в систему, как только они зарегистрируются, но я не уверен, что происходит. Это не сработает. LocalStorage настроен так, как должен, но не будет отображать данные пользователя.

JS:

function addObject(){
    if(confirm('Are you sure you want to resgister?')){
     fName = document.getElementById('fName').value;
     lName = document.getElementById('lName').value;
     userName = document.getElementById('uName').value;
     pass = document.getElementById('password').value;
     email = document.getElementById('email').value;
     dob = document.getElementById('dob').value;
     tel = document.getElementById('tel').value;
     bio = document.getElementById('bio').value;
     terms = document.getElementById('terms').value;
     school = document.getElementById('school').value;

     //Need loop to find radio button values
     radios = document.getElementsByName('gender');
     for (var i = 0, length = radios.length; i < length; i++) {
        if (radios[i].checked) {
            gender=radios[i].value;
        }
     }

        //set up transaction
        var mytransaction = db.transaction(['users'], "readwrite"); 

        //get object store
        var myusers = mytransaction.objectStore('users'); 

        //Add item
        var request = myusers.put(new getUser(userName,fName,lName,pass,email,dob,tel,bio,terms,school,gender));
    }

    // Show all results.
    if(document.URL.indexOf('admin.html') > -1){
        mytransaction.addEventListener('complete', showUsers);  
    } 

    //Log in new users
    loginCheck(userName,pass);
    /*newLocal('user',user); */
    //Reset Form Fields
    resetForm(); 

}

Это функции, которые я использую, когда кто-то входит в систему.

function loginCheck(user,pass){    
db.transaction("users").objectStore("users").get(user).onsuccess = function(e) {
    var loggedUser = e.target.result;
        if(!loggedUser){
            alert('Sorry, Username does not exist. Please try again.');
        }else if(pass !== loggedUser.pw ){
            alert('Incorrect log in combination. Please try again.');
            }else{
                loggedIn(loggedUser);
                populateFields(loggedUser);
                loginStyle(loggedUser)
                }        
    }    
}
function loggedIn(loggedUser){
    var u=loggedUser;
    alert('Welcome '+u.fn+' '+u.ln+' to Macroplay');       

    //Set localStorage     
    var signedin = 'user';
    var username = u.userName;
    newLocal(signedin,username);
}
function getValues(){ 
db.transaction("users").objectStore("users").get(localStorage.user).onsuccess = function(e) { 
    populateFields(e.target.result); 
    loginStyle(e.target.result)
    }; 
    ;
}

Из того, что я вижу, первая часть добавляет пользователя в БД, а вторая часть должна вести себя так, как если бы я просто вел обычный журнал. Но он не будет подтягивать информацию из БД.

Я попытался настроить нового пользователя на localStorage, и именно так я узнаю пользователя, вошедшего в систему, но это также не имело никакого эффекта.

Это мой сайт: http://www3.carleton.ca/clubs/sissa/html5


person Batman    schedule 23.03.2013    source источник


Ответы (1)


Похоже, вы используете обработчик onsuccess в методе loginCheck, но не при вызове put в БД. Я предполагаю, что вы проверяете, существует ли пользователь, прежде чем он действительно сможет быть добавлен. Попробуй это:

//Add item
var request = myusers.put(new getUser(userName,fName,lName,pass,email,dob,tel,bio,terms,school,gender));
request.onsuccess = function () {

    // Show all results.
    if(document.URL.indexOf('admin.html') > -1){
        mytransaction.addEventListener('complete', showUsers);  
    } 

    //Log in new users
    loginCheck(userName,pass);
    /*newLocal('user',user); */
    //Reset Form Fields
    resetForm(); 
}
person bmceldowney    schedule 23.03.2013
comment
Я пробовал это, но выдает ошибку, что пользователя нет в БД, и когда я проверяю свою БД в консоли, ключ пользователя есть, но объект равен нулю. Я пробовал изменить onsuccess на oncomplete, но это тоже не помогло - person Batman; 23.03.2013