我想用jQuery序列化和反序列化一个表单。
如何以序列化的方式获取所有元素的所有属性?
发布于 2010-06-23 17:07:17
jQuery有一个serialize函数。
$("#form").serialize(); // Returns serialized string参考:http://api.jquery.com/serialize/
发布于 2010-06-23 17:17:52
.serialize()会将定义了name属性的输入控件映射到标准查询字符串中:
foo=bar&bar=foo&and=soon这种类型的字符串在几乎所有“后端”编程语言中都很容易访问。
如果需要序列化对象信息,请使用JSON。
var obj = {
foo: 'bar',
more: 'etc
};使用window.JSON.stringify(obj);将其序列化。要对这样的JSON字符串进行反序列化,可以使用window.JSON.parse(str);,它返回一个javascript对象。
许多语言都支持这一原则。
发布于 2021-01-30 09:19:27
2020年解决方案
serialize()
包含在jQuery本身中就是为了这个目的https://api.jquery.com/serialize/
$('#someKind .ofASelectorForYour form').serialize(); (返回序列化字符串)
unserialize()
并不包含在jQuery中,但是文档中说
.serialize()方法以标准的URL编码表示法创建文本字符串。
...so,在2020年,我们可以利用URLSearchParams接口:
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
https://url.spec.whatwg.org/#interface-urlsearchparams
function unserialize(serializedData) {
var urlParams = new URLSearchParams(serializedData); // get interface / iterator
unserializedData = {}; // prepare result object
for ([key, value] of urlParams) { // get pair > extract it to key/value
unserializedData[key] = value;
}
return unserializedData;
}(返回未序列化的密钥=>值对的对象)
一次性使用提取器的一行程序(您的数据在sData中,结果在unsData中):
var prms = new URLSearchParams(sData); unsData = {}; for ([k, v] of prms) unsData[k] = v;顺便说一句:正如MDN文档所说,
以下两行的
是等效的:
for (const [key, value] of mySearchParams) {}
for (const [key, value] of mySearchParams.entries()) {}
https://stackoverflow.com/questions/3100297
复制相似问题