Не може да изтегли потребителска информация веднага след въвеждане в indexedDB

Имам регистрационен формуляр с индексирана база данни. Регистърът/входът ми работи. Опитвах различни неща, за да накарам нов регистър да влезе веднага щом се регистрират, но не съм сигурен какво става. Няма да работи. 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)
    }; 
    ;
}

От това, което виждам, първата част добавя потребителя към DB, а втората част трябва да се държи както е, просто влизах нормално. Но няма да изтегли информацията от БД.

Опитах да настроя новия потребител на localStorage, което е начинът, по който разпознавам потребител, който в момента е влязъл, но това също няма ефект.

Това е моят сайт: http://www3.carleton.ca/clubs/sissa/html5


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


Отговори (1)


Изглежда, че използвате манипулатора onsuccess в метода loginCheck, но не го използвате, когато извиквате put в db. Предполагам, че проверявате дали потребителят съществува, преди действително да има шанс да бъде добавен. Опитайте тази:

//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
Опитах това, но ми дава грешка, че потребителят не е в DB и когато проверявам моята DB в конзолата, потребителският ключ е там, но обектът е null. Опитах да променя onsuccess на oncomplete, но и това не помогна - person Batman; 23.03.2013