【问题标题】:serialize form to json and store in the cookie将表单序列化为 json 并存储在 cookie 中
【发布时间】:2011-07-24 10:39:21
【问题描述】:

我想将表单存储在客户端,在 json 中存储在 cookie 中,然后将其反序列化回表单。 我在做什么:

序列化为 JSON:

function formToJSON(selector) {
    var form = {};
    $(selector).find(':input[name]:enabled').each(function () {
        var self = $(this);
        var name = self.attr('name');

        if (name.indexOf('TextBox', 0) == 0) {
            if (form[name]) {
                form[name] = form[name] + ',' + self.val();
            }
            else {
                form[name] = self.val();
            }
        }
    });

    return form;
}

然后在表单更改时,我正在尝试将表单保存到 cookie:

 $('#form1 :input').change(function () {

    var eba = formToJSON($('#form1'));

    $.cookie.set('fo', eba, {json:true});
    var a = $.cookie.get('fo',true);
    alert(a);


    //$.cookie.set('form123', { "ksf": "saf", "tt": "" }, { json: true });
    //var b = $.cookie.get('form123', true);
    //alert(JSON.stringify(b));
});

在调试器中 - eba 是 json 对象,但 alert(a) 给出 null。 注释代码有效,这个 json 序列化,我从 cookie 中得到它。 但是为什么代码对表单不起作用??? 来自 jquery.com 的 cookie 插件

【问题讨论】:

  • 我立即看到的两个问题:第一个选择器的开头不应有 ':',您也可以跳过 [name] 位。其次,当您调用formToJSON 时,您只需要传递一个字符串,尽管后一个不会导致问题(只是效率低下)。

标签: javascript jquery json serialization cookies


【解决方案1】:

使用这个库来字符串化/解析 JSON http://json.org/js.html

请记住,cookie 的大小限制约为 4KB,http://support.microsoft.com/kb/306070

【讨论】:

  • 不明白为什么要使用它。
  • 对不起,我总是使用这个库在 JSON 和 JavaScript 对象之间进行序列化和反序列化。它比我在合理时间内写的任何东西都更快、更健壮。至少这样我知道我只需要担心存储空间。我将它与 HTML5 localStorage 一起使用,没有任何问题。您仍然需要从表单中提取元素并将其放入对象中进行存储。 Cookie 只是真正存储字符串,您是否通过 cookie 插件代码查看存储了什么?
【解决方案2】:

无法使用javascript读取AFAIK浏览器cookie(您自己的域除外),以防止Cross Site Reeuqest Forgery 但您仍然可以设置它们。

【讨论】:

  • @wildcard :我的错,我忘了说这个事实:)。
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
相关资源
最近更新 更多