2014-10-21 4 views
1

Я использую следующий фрагмент для извлечения объекта, ранее сохраненного в localStorage, но по какой-то причине при попытке его изменения объект остается не поддающимся проверке.Невозможно изменить свойство объекта, полученного из localStorage

Это, как я создаю объект:

if(typeof(Storage) !== "undefined") { 
    if(!localStorage.Obj){ 
     localStorage.Obj = new Object(); 
    } 
    var Obj = localStorage.Obj; 

} else { 
    if(!$.cookie("Obj")){ 
     $.cookie("Obj", new Object(), { 
      expires : 7, // Days 
      domain : 'localhost:8080', 
      secure : true 
     }); 
    } 
    var Obj = $.cookie("Obj"); 
} 

Это где я пытаюсь изменить объект:

var login = function(email, passwd){ 

    $.ajax({ 
     url: "http://127.0.0.1/api/v1/login", 
     type: "POST", 
     data: { email: email, password: SHA256_hash(passwd), platform: getBrowserName(), osVersion: getOsName()}, 
     beforeSend: function(xhr){xhr.setRequestHeader('apiKey', "46d1e2f6-cf37-4275-bc1c-d674b12cc9bf");}, 
     success: function(data, status, xhr){ 
      Obj["logged_in"] = true; 
      Obj["sessionKey"] = data.sessionKey; 
      Obj["user_id"] = data.userID; 
      Obj["time_format"] = data.timeFormat; 
      Obj["first_name"] = data.firstName; 
      Obj["last_name"] = data.lastName; 
     }, 
     error: function(data, status, xhr){ 
      console.log(data); 
     } 
    }); 

    if(Obj.logged_in){ 
     window.location.replace("http://127.0.0.1/users/" + Obj.user_id + "/todos"); 
    } 
}; 

Мне нужно отметить, 3 вещи:

  • Я использую jQuery
  • 2 кода указаны в differe nt файлы, но порядок загрузки правильный.
  • При использовании console.log(Obj) я получаю следующие данные: "[object Object]"
  • Заранее спасибо.
+1

дочитать о том, как работает LocalStorage ... это только хранит строковые данные. Вы можете конвертировать с помощью JSON.stringify() и JSON.parse() – charlietfl

+0

Я вижу, как только я перешел на json String и загрузил его, работала отлично. Пожалуйста, добавьте свой ответ в качестве официального ответа, чтобы я мог установить его как правильный для будущего. –

ответ

1

Основная проблема заключается в том, что localStorage хранит только строковые данные.

Для массивов и объектов, однако они могут быть просто преобразованы в строки с помощью JSON.stringify() и при извлечении из LocalStorage строка может быть преобразована в JavaScript Object или массив с помощью JSON.parse()

небольшой библиотеки, которая полезна является store.js

0

How do I correctly clone a JavaScript object?

От ответа Паскаля: с JQuery, вы можете неполную копию с:

var copiedObject = jQuery.extend({}, originalObject) 

последующие изменения в файле copiedObject не повлияют на исходный объект, и наоборот.

Или сделать глубокую копию:

var copiedObject = jQuery.extend(true, {}, originalObject) 
Смежные вопросы