0

マイページにはたくさんのフォームがあります。それらを 1 つのオブジェクトにマージし、1 つのオブジェクトで送信したいと考えています。しかし、私は自分の要求を見つけるserializeArray()serialize()一致しません。serializeArray 関数は配列オブジェクトを生成し、シリアライズは get モデルによって使用されますが、オブジェクトではありません。

jqueryまたはローカル関数でそれらを1つのオブジェクトにマージできますか?

解決策は 1 つありますが、完全ではありません。serializeArray によって生成された配列オブジェクトをループし、$.extendそれらを 1 つのオブジェクトにマージするために使用します。より良い方法はありますか?

親切に助けてください、ありがとう。

4

1 に答える 1

0

私は自分で解決策を見つけました。シリアル化機能を模倣して、簡単なプラグインを作成します。欠陥があれば、ご指摘ください、ありがとう

(function($) {
$.fn.paramJson = function(a, traditional) {
    var prefix, s = [], add = function(key, value) {
        // If value is a function, invoke it and return its value
        value = $.isFunction(value) ? value() : (value == null ? ""
                : value);
        s[s.length] = "\"" + encodeURIComponent(key) + "\"" + ":" + "\""
                + encodeURIComponent(value) + "\"";
    };

    // Set traditional to true for jQuery <= 1.3.2 behavior.
    if (traditional === undefined) {
        traditional = $.ajaxSettings
                && $.ajaxSettings.traditional;
    }

    // If an array was passed in, assume that it is an array of form
    // elements.
    if ($.isArray(a) || (a.jquery && !$.isPlainObject(a))) {
        // Serialize the form elements
        $.each(a, function() {
            add(this.name, this.value);
        });

    } else {
        // If traditional, encode the "old" way (the way 1.3.2 or older
        // did it), otherwise encode params recursively.
        for (prefix in a) {
            buildParams(prefix, a[prefix], traditional, add);
        }
    }

    // Return the resulting serialization
    return "{" + s.join(",").replace(r20, "+") + "}";
};
$.fn.serializeJson = function() {
    return $.parseJSON($.paramJson( this.serializeArray()));
};      

})(jQuery)

于 2013-10-29T01:48:29.797 に答える