我需要序列化一个关联的JavaScript数组。 它是一种简单的产品形式和数值,但在构建数组之后似乎是空的。
答案 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编码功能。
<强>最佳:强>
如果您为输入字段指定了正确的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
个值。)
答案 1 :(得分:5)
您可以使用JSON library(或本机JSON object(如果有))将其序列化。
var serialised = JSON.stringify(obj);
答案 2 :(得分:2)