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对象.
许多语言都支持这一原则.
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()) {}
jQuery 有一个serialize函数。
$("#form").serialize(); // Returns serialized string
Run Code Online (Sandbox Code Playgroud)
参考: http: //api.jquery.com/serialize/