【问题标题】:How to store JS Object in cookie如何将 JS 对象存储在 cookie 中
【发布时间】:2023-03-31 06:37:01
【问题描述】:

给定一个对象:

var object = {
        "key1" : Math.random()*10000000000000000,
        "key2" : "value",
        "key3" : "value",
    }

当有人填写具有相应值的表单时,我如何将其存储在浏览器 cookie 中?当用户返回页面填写表单时,值应从 cookie 填充表单。

【问题讨论】:

  • JSON.stringify()/JSON.parse()
  • 我使用var formCookie = JSON.stringify(object);得到一个JSON对象,所以问题是如何将它存储到cookie中,然后检索它并解析。
  • JSON.stringify() 给你一个 json string。没有“json 对象”这样的东西。由于您现在有一个字符串,因此将值存储在 cookie 中应该是微不足道的。您最喜欢的搜索引擎应该能够将您引导至数百个示例。

标签: javascript jquery cookies


【解决方案1】:

扩展已经给出的答案(cmets 和自定义 JS 方法)......我想把它放在一个工作示例中......所以这里......

首先,使用 JSON 可以让您轻松地将对象与 JSON 相互转换,而无需使用自己的方法。这是当今最常见的方法和众所周知的标准。所以大多数语言都支持对于 JSON..

扩展subas chandran提供的示例...

var object={name : username.value, email : email.value, gender : gender.value};
var stringObj=JSON.stringify(object);

在这里看到http://jsfiddle.net/LLujbb2h/ 使其易于使用,如果您想处理字符串/数组和对象,则不受限制。您只需将主要对象交给它,它就会为您完成所有工作......那么为什么要重新发明轮子呢??

使用此处显示的非 JSON 方法http://jsfiddle.net/1bf4dg8o/ 有很多问题,例如从 cookie 中读回对象后处理对象.. 它只是一个字符串...如果说例如你把 :: in你的名字/电子邮件/性别..这会破坏自定义语法......我会不惜一切代价避免这种方法!

简单地,测试我创建的第一个小提琴,你会发现它更容易处理......

还可以使用浏览器上的检查器查看 cookie,因为这将有助于调试..

EDIT - 展示如何将 cookie 读回 JS 对象 http://jsfiddle.net/LLujbb2h/2/

【讨论】:

    【解决方案2】:

    将您的对象/数组转换为 json 字符串。 你可以像这样设置cookie:

      var object = {
        "key1" : Math.random()*10000000000000000,
        "key2" : "value",
        "key3" : "value",
        }
    
     let objectString = JSON.stringify(object);
    document.cookie = "myobject=" + objectString + "; expires="+ (new Date()).toDateString();
    

    上述 cookie 今天到期。您可以将其他可选值设置为all。

    要检索之前设置的 cookie:

      let cookies = document.cookie;
       console.log(cookies);
    

    【讨论】:

      【解决方案3】:
      var saveButton=document.getElementById("save");
      var username=document.getElementById("Name");
      var email=document.getElementById("Email");
      var gender=document.getElementById("Gender");
      function setCookie(value, exdays) {
          var d = new Date();
          d.setTime(d.getTime() + (exdays*24*60*60*1000));
          var expires = "expires="+d.toUTCString();
          document.cookie = "Username"+ "=" + value + "; " + expires;
          if(document.cookie)
              return true;
      }
      function objToString (obj) {
          var str = '';
          for (var p in obj) {
              if (obj.hasOwnProperty(p)) {
                  str += p + '::' + obj[p] + '\n';
              }
          }
          return str;
      }
      saveButton.onclick=function () {
          // body...
          var object={name : username.value, email : email.value, gender : gender.value};
          var stringObj=objToString(object);
          alert(stringObj);
          if(setCookie(stringObj,1))
              alert("cookie set");
      }; 
      

      【讨论】:

      • 一个简单任务的复杂方法,认为你可能混淆了 OP 而不是帮助.. 只需要一个 JSON 字符串......
      • 很抱歉,我在这里看到了一些问题,因此不得不投反对票,首先,上面的代码不能直接工作。你需要删除换行符。其次,对于名称/电子邮件或任何字符串。如果不使用正则表达式类型表达式,这将不容易转换回对象。另外,如果我只是将 :: 添加到字符串中,这会破坏脚本更进一步.. 我只对此发表评论,因为谷歌寻找答案的人应该有最好的方向来节省他们的时间。
      猜你喜欢
      • 2011-09-30
      • 2023-03-15
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      相关资源
      最近更新 更多