如何将JSON响应存储在localStorage

时间:2015-06-02 10:21:02

标签: javascript json

我需要什么:

  • 存储在localStorage
  • 中的所有JSON数据

到目前为止我的JS代码:

for (var x = 0; x < parsed.length; x++) {

  var objs = parsed[x];
  console.log(objs);
  // console above json string prints.

  var ajaxData = JSON.parse(localStorage.getItem('ajaxData'));

if (ajaxData == null) {
    ajaxData = [];
  }

  var details = {};
  details["id"] = id;
  details["eventname"] = eventname;
  details["city"] = city;
  details["country"] = country;
  details["event_url"] = event_url;
  details["month"] = month;
  details["day"] = day;

  ajaxData.push(details);

  localStorage.setItem('ajaxData', JSON.stringify(ajaxData));
  var EventDetails = JSON.parse(localStorage.ajaxData);
  console.log(EventDetails);

问题是:

  • 刷新页面时,反复显示相同的数据。
  • 我认为我的存储机制或JSON序列化是错误的。

2 个答案:

答案 0 :(得分:0)

当您设置details时,您无法从objs中获取数据。这可能是向前迈出的一步:

var i, objs, ajaxData, details, debugDetails;

for (i = 0; i < parsed.length; i++)
{
  objs = parsed[i];
  console.log(objs); // debug print-out of JSON content

  ajaxData = localStorage.ajaxData;

  if (ajaxData === null)
  {
    ajaxData = [];
  } else {
    ajaxData = JSON.parse(ajaxData); // only if it is valid JSON
  }

  // exclude from local storage irrelevant data
  details = {
    "id": objs.id,
    "eventname": objs.eventname,
    "city": objs.city,
    "country": objs.country,
    "event_url": objs.event_url,
    "month": objs.month,
    "day": objs.day
  };

  ajaxData.push(details);
  localStorage.ajaxData = JSON.stringify(ajaxData);

  debugDetails = JSON.parse(localStorage.ajaxData);
  console.log(debugDetails); // debug print-out of stored details

这有用吗?

我还替换了语法的主要部分:

  • 变量被提升到顶部,JS中没有局部变量这样的东西;
  • 您可以按照此处显示的方式设置和对象,比分别设置所有属性更方便;
  • localStorage可以如图所示使用,这是使用它的标准方式(而不是getItem() / setItem())。

如果这不能按预期工作,我会深入挖掘。让我知道。

通过进一步优化代码,结果如下:

var i, ajaxData;

for (i = 0; i < parsed.length; i++)
{
  ajaxData = localStorage.ajaxData;
  ajaxData = ajaxData === null ? [] : JSON.parse(ajaxData);

  ajaxData.push({
    "id": parsed[i].id,
    "eventname": parsed[i].eventname,
    "city": parsed[i].city,
    "country": parsed[i].country,
    "event_url": parsed[i].event_url,
    "month": parsed[i].month,
    "day": parsed[i].day
  });

  localStorage.ajaxData = JSON.stringify(ajaxData);

答案 1 :(得分:0)

 var details = {};
  details["id"] = "id";
  details["eventname"] = "eventname";
  details["city"] = "city";
  details["country"] = "country";
  details["event_url"] = "event_url";
  details["month"] = "month";
  details["day"] = "day";

    // Put the object into storage
    localStorage.setItem('storeObject', JSON.stringify(details));

    // Retrieve the object from storage
    var retrievedObject = localStorage.getItem('storeObject');

    console.log('retrievedObject: ', JSON.parse(retrievedObject));