2016-03-17 3 views
-1

Мне нужно сохранить информацию пользователя, используя localStorage или что-нибудь, что действительно работает. Я не знаю много о localStorage, но я считаю, что для хранения объекта в нем мне нужна функция в создателе объекта. Возможно, я ошибаюсь, но именно поэтому я отправляю сообщения.Сохранение объекта с localStorage без JSON

Я думаю, что вы можете использовать localStorage.username (this.username), чтобы сохранить имя пользователя, но мне нужно теперь как хранить весь объект без использования JSON stringify. localStorage.newPlayer()

JSfiddle link here

function Player(username, lvl, exp, expNeeded, nextLevel, gold, hp, atk, def, spd) { 
    var self = this; 
    this.username = username; 
    this.lvl = lvl; 
    this.exp = exp; 
    this.nextLevel = nextLevel; 
    this.expNeeded = expNeeded; 
    this.gold = gold; 
    this.fullLife = hp; 
    this.hp = hp; 
    this.atk = atk; 
    this.def = def; 
    this.spd = spd; 
    this.implement = function() { 
     $('#user').text(this.username).addClass('playerName').data('player', self); 
     $('#username').text("Username: " + this.username); 
     $('#lvl').text("Level: " + this.lvl); 
     $('#exp').text("Experience: " + this.exp); 
     $('#expNeeded').text("Experience Needed: " + this.expNeeded); 
     $('#gold').text("Gold: " + this.gold); 
     $('#hp').text("HP: " + this.fullLife); 
     $('#attack').text("Attack: " + this.atk); 
     $('#defense').text("Defense: " + this.def); 
     $('#speed').text("Speed: " + this.spd); 
     $('#nextLevel').text("Next Level: " + this.nextLevel); 
    }; 
    this.implement(); 
} 
if($('body').attr("id") == "Home") { 
    var newPlayer = new Player(prompt("What is your username?"), 1, 0, 10, 10, 0, 10, 2, 1, 1); 
} 
playerEl = $('.playerName'); 
player = playerEl.data('player'); 

Если вам нужно, чтобы увидеть полный код, дайте мне знать,

+2

Возможный дубликат [Сохранение объектов в HTML5 LocalStorage] (http://stackoverflow.com/questions/2010892/storing-objects-in- html5-localstorage) – jrummell

+1

Просьба уточнить вашу конкретную проблему. Что-нибудь неожиданное? Что это? – Xufox

ответ

1

Можете ли вы объяснить, почему JSON.stringify(new Player()) не является приемлемым?

Если вы не можете использовать JSON, вы просто должны сохранить каждую пару имя/значение в localStorage отдельно и получить их по отдельности или создать пользовательскую строку самостоятельно, чтобы поместить в localStorage, но JSON.stringify() действительно лучше всего подходит для вашего сценария.

Я думаю, вам просто нужно, чтобы удалить это из функции игрока:

this.implement = function() { 
    $('#user').text(this.username).addClass('playerName').data('player', self); 
    $('#username').text("Username: " + this.username); 
    $('#lvl').text("Level: " + this.lvl); 
    $('#exp').text("Experience: " + this.exp); 
    $('#expNeeded').text("Experience Needed: " + this.expNeeded); 
    $('#gold').text("Gold: " + this.gold); 
    $('#hp').text("HP: " + this.fullLife); 
    $('#attack').text("Attack: " + this.atk); 
    $('#defense').text("Defense: " + this.def); 
    $('#speed').text("Speed: " + this.spd); 
    $('#nextLevel').text("Next Level: " + this.nextLevel); 
}; 
this.implement(); 

Так что игрок может сериализовать в объект JSON, который затем может быть установлен в LocalStorage.

Этот код будет затем съехал в истинном блоке вашего if заявлении, и ссылки на this будут заменены на экземпляр объекта newPlayer.

Смотрите эту рабочую скрипку: https://jsfiddle.net/LqgLxr0r/5/

enter image description here

+0

Он все еще ломается, когда я переключаю страницы. Мне нужна переменная, которую нужно сохранить, и ее можно вызвать на другой странице, есть ли другой способ сделать это? – Shniper

+0

Вам нужно объяснить, что означает «перерывы». Моя скрипка показывает объект, заданный в localStorage, поэтому вам просто нужно использовать 'var player = JSON.parse (localStorage.getItem (« player »)),' на следующей странице. –

+0

после удара ok на promp на домашней странице Я получаю http://prntscr.com/agl5qw, если я иду на страницу битвы после этого, я получаю http://prntscr.com/agl678 жаль, что не даю подробностей, но я никогда не работал с JSON или localStorage и действительно не знаю, что вам нужно знать, чтобы понять это. – Shniper

-1
//global function 

Storage.prototype.setObject = function(key, value) { 
    this.setItem(key, JSON.stringify(value)); 
    } 

    Storage.prototype.getObject = function(key) { 
    var value = this.getItem(key); 
    return value && JSON.parse(value); 
    } 


//page 1 code 

//your data 
var arrayObj = [{ 
    name: 'user4', 
    userid: '1111', 
    msg: 'hello world!' 
    }, { 
    name: 'user2', 
    userid: '2222', 
    msg: 'hello universe!' 
    }]; 







    localStorage.setObject('userInfo', arrayObj); 

// page 1 code ends here 


// page 2 code 

    if (window.localStorage) { 

     var $val = localStorage.getObject('userInfo', arrayObj); 
    } 

// returns $val = [{name: 'user4',userid: '1111',msg: 'hello world!'}, {name: 'user2',userid: '2222',msg: 'hello universe!'}]; 
Смежные вопросы