首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化serializeArray

格式化serializeArray
EN

Stack Overflow用户
提问于 2012-07-29 00:29:39
回答 1查看 741关注 0票数 3

jQuery.serializeArray当前返回以下结果:

代码语言:javascript
复制
[Object { name="id",  value="0"}, Object { name="gender[]",  value="1"}, Object { name="gender[]",  value="2"}, Object { name="countries[]",  value="AU"}, Object { name="countries[]",  value="GB"}, Object { name="ages[]",  value="25"}, Object { name="ages[]",  value="99"}]

我想用这种方式来格式化结果:

代码语言:javascript
复制
{id: 0, gender: ['1', '2'], countries: ['AU', 'GB'], ages: ['25', '99']}

如何做到这一点?

我不喜欢serializeArray格式化它的输出的方式,我创建了一个函数,它以一种更容易接受的方式格式化它。

代码语言:javascript
复制
(function( $ ){
$.fn.serializeJSON=function() {
    var json = {}, propname;
    $.each($(this).serializeArray(), function(index, n){
        propname = n.name.replace('[]', '');
        if (!json.hasOwnProperty(propname))
        {
            json[propname] = n.value;
        }
        else if( ! (json[propname] instanceof Array) )
        {
            json[propname] = new Array(json[propname], n.value);
        }
        else
        {
            json[propname].push(n.value);
        }
    });
    return json;
}; 
})(jQuery);

创建表单后,只需将以下代码放在某个位置:

代码语言:javascript
复制
$('#form_id').submit(function(e) {
    e.preventDefault();
    e.stopPropagation();
    var data = $(this).serializeJSON();
    console.log(data);
})

我希望它能帮助那些喜欢将表单发布到PHP的人。

EN

回答 1

Stack Overflow用户

发布于 2013-01-29 23:18:08

我使用的是:

代码语言:javascript
复制
$.fn.serializeObject = function(options) {

    options = $.extend({}, options);

    var self = this,
        json = {},
        push_counters = {},
        patterns = {
            "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
            "key":      /[a-zA-Z0-9_\sąćęłóśżźĄĆĘŁÓŚŻŹ\/-]+|(?=\[\])/g,
            "push":     /^$/,
            "fixed":    /^\d+$/,
            "named":    /^[a-zA-Z0-9_]+$/
        };


    this.build = function(base, key, value){
        base[key] = value;
        return base;
    };

    this.push_counter = function(key){
        if(push_counters[key] === undefined){
            push_counters[key] = 0;
        }
        return push_counters[key]++;
    };

    $.each($(this).serializeArray(), function(){
        var k,
            keys = this.name.match(patterns.key),
            merge = this.value,
            reverse_key = this.name;

        while((k = keys.pop()) !== undefined){
            reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');

            merge = self.build({}, k, merge);
        }
        json = $.extend(true, json, merge);
    });

    return json;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11702747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档