我正在使用jQuery,我想从表单中收集数据,然后在序列化之前对其进行操作。表单对象本身是一个非常复杂的野兽,包含其所有后代DOM节点等等。
基本上,我想要的是序列化数据,但是采用非序列化格式。
我可以这样做:
function unser(serdata) {
var data = {};
var str = unescape(serdata);
var pairs = str.split('&');
for (var i=0;i<pairs.length;i++) {
var pp = pairs[i].split('=');
data[pp[0]] = pp[1];
}
return data;
}
然后当我这样做时:
unser( $('form').serialize() );
我有一个数据对象,然后我可以操作然后将其序列化并将其发送到后端服务器。但肯定的是,必须有一种jQuery方式来做到这一点,我没有看到?
有类似的东西几乎是有道理的:
$('form').formData();
答案 0 :(得分:4)
有没有办法在jQuery.serialize()
之前获取表单数据
你想要$('form').serializeArray()
。然后,您可以修改结果,完成后,将其传递给$.param
$.param($('form').serializeArray())
相当于:
$('form').serialize()
答案 1 :(得分:0)
上面的@Eric's answer是正确的。
但是,如果您已获得序列化数据(例如来自表单帖子或查询字符串),则此插件将允许您解码和使用数据。
我找到了jQuery.deserialize
,这是一个与jQuery.serialize()
相反的jQuery插件,您可以这样使用:
$('form').deserialize( $('form').serialize() );
它支持对复杂类型进行反序列化,例如数组(即多个选择和复选框数组 - 请参阅jQuery.serialize()
上有关这些示例的文档)和对象(请参阅http://benalman.com/projects/jquery-misc-plugins/#serializeobject)。
由于查询字符串与表单数据(application/x-www-form-urlencoded
)相同,因此您也可以使用此插件正确解码查询字符串。