有没有办法在jQuery.serialize()之前获取表单数据或者与jQuery.serialize()相反?

时间:2015-03-19 19:05:40

标签: javascript jquery

我正在使用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();

2 个答案:

答案 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)相同,因此您也可以使用此插件正确解码查询字符串。