3 Stimmen

Formatierung serializeArray

JQuery.serializeArray liefert derzeit dieses Ergebnis:

[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"}]

Ich möchte das Ergebnis auf diese Weise formatiert bekommen:

{id: 0, gender: ['1', '2'], countries: ['AU', 'GB'], ages: ['25', '99']}

Wie kann dies erreicht werden?

Ich mochte es nicht, wie serializeArray seine Ausgabe formatiert, und ich habe eine Funktion erstellt, die sie auf akzeptablere Weise formatiert.

(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);

Nachdem das Formular erstellt wurde, setzen Sie einfach irgendwo dieses Codestück ein:

$('#form_id').submit(function(e) {
    e.preventDefault();
    e.stopPropagation();
    var data = $(this).serializeJSON();
    console.log(data);
})

Ich hoffe, es hilft denjenigen, die es mögen, wie ein Formular in PHP gepostet wird.

0voto

jarekpelczynski Punkte 91

Ich benutze dies:

$.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;
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X