jQuery序列化和反序列化

Jam*_*mes 6 jquery

我想用jQuery序列化和取消序列化表单.

如何以序列化方式获取所有元素的所有属性?

jAn*_*ndy 16

.serialize()会将具有name属性定义的输入控件映射到标准查询字符串中:

foo=bar&bar=foo&and=soon
Run Code Online (Sandbox Code Playgroud)

几乎每种"后端"编程语言都可以轻松访问这种字符串.

如果需要序列化对象信息,请使用JSON.

var obj = {
    foo:  'bar',
    more: 'etc
};
Run Code Online (Sandbox Code Playgroud)

序列化这个window.JSON.stringify(obj);.要反序列化这样的JSON字符串,请使用window.JSON.parse(str);,它返回一个javascript对象.

许多语言都支持这一原则.


jav*_*web 7

2020年解决方案

serialize()

为此目的包含在 jQuery 本身中https://api.jquery.com/serialize/

$('#someKind .ofASelectorForYour form').serialize();(返回序列化字符串)

unserialize()

不包含在 jQuery 中,但是,文档说

.serialize() 方法以标准 URL 编码表示法创建文本字符串。

...所以,在 2020 年,我们可以利用该URLSearchParams界面:https:
//developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
https://url.spec.whatwg.org/#interface-网址搜索参数

function unserialize(serializedData) {
    let urlParams = new URLSearchParams(serializedData); // get interface / iterator
    let unserializedData = {}; // prepare result object
    for (let [key, value] of urlParams) { // get pair > extract it to key/value
        unserializedData[key] = value;
    }

    return unserializedData;
}
Run Code Online (Sandbox Code Playgroud)

(返回未序列化键的对象 => 值对)
一次性使用提取器的单行(您的数据在sData,结果为unsData):

let prms = new URLSearchParams(sData); let unsData = {}; for (let [k, v] of prms) unsData[k] = v;
Run Code Online (Sandbox Code Playgroud)

顺便说一句:正如 MDN 文档所说,

以下两行是等效的:
for (const [key, value] of mySearchParams) {}
for (const [key, value] of mySearchParams.entries()) {}


Pek*_*ica 2

jQuery 有一个serialize函数。

$("#form").serialize(); // Returns serialized string
Run Code Online (Sandbox Code Playgroud)

参考: http: //api.jquery.com/serialize/

  • 反序列化怎么样? (15认同)