如何序列化JavaScript关联数组?

时间:2011-06-22 10:47:46

标签: javascript jquery arrays forms

我需要序列化一个关联的JavaScript数组。 它是一种简单的产品形式和数值,但在构建数组之后似乎是空的。

代码在这里:http://jsbin.com/usupi6/4/edit

3 个答案:

答案 0 :(得分:6)

通常,不要将JS数组用于“关联数组”。使用普通对象:

var array_products = {};

这就是为什么$.each不起作用的原因:jQuery认识到您传递数组并且只是在数字属性上进行迭代。所有其他人都将被忽略。

数组应该只包含带数字键的条目。您可以指定字符串键,但很多功能都不会考虑它们。


<强>更好的:

使用jQuery时,可以使用jQuery.param [docs]进行序列化。您只需要构造正确的输入数组:

var array_products = []; // now we need an array again
$( '.check_product:checked' ).each(function( i, obj ) {
    // index and value
    var num = $(obj).next().val();
    var label = $(obj).next().next().attr( 'data-label' );
    // build array
    if( ( num > 0 ) && ( typeof num !== undefined ) ) {
        array_products.push({name: label, value: num});
    }      
});

var serialized_products = $.param(array_products);

无需实现自己的URI编码功能。

DEMO


<强>最佳:

如果您为输入字段指定了正确的name

<input name="sky_blue" class="percent_product" type="text" value="20" />

您甚至可以使用.serialize() [docs]并大大减少代码量(我使用next adjacent selector [docs]):

var serialized_products = $('.check_product:checked + input').serialize();

(但它会包含0个值。)

DEMO

答案 1 :(得分:5)

您可以使用JSON library(或本机JSON object(如果有))将其序列化。

var serialised = JSON.stringify(obj);

答案 2 :(得分:2)

JSON.stringify(object)

作为旁注,没有关联数组,只有对象。

使用json-js支持IE6和IE7等传统浏览器