Мне нужно сериализовать ассоциативный массив JavaScript. Это простая форма продуктов и числовые значения, но сразу после построения массив кажется пустым.Как сериализовать ассоциативный массив JavaScript?
Код здесь: http://jsbin.com/usupi6/4/edit
Мне нужно сериализовать ассоциативный массив JavaScript. Это простая форма продуктов и числовые значения, но сразу после построения массив кажется пустым.Как сериализовать ассоциативный массив JavaScript?
Код здесь: http://jsbin.com/usupi6/4/edit
В общем, не используют 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
значений, хотя).
JSON.stringify(object)
Как заметка на полях нет ассоциативных массивов есть только объекты.
Использование json-js для поддержки старых браузеров, таких как IE6 и IE7
Не JSON.stringify доступен только для более современных браузеров? Если вы не указали ссылку на скрипт на [json2.js] (https://github.com/douglascrockford/JSON-js)? –
@AshClarke зависит от вашего определения современных браузеров. Он поддерживается всеми текущими и недавними браузерами.Если вам нужна поддержка _legacy_, используйте json2 (я уже добавил ссылку) – Raynos
@Raynos не будет 'let arr = []; a ['foo'] = 'bar'; JSON.stringify (a); 'stringify it to '[]' – ShrekOverflow
Вы можете сериализация его с JSON library (или родной JSON object если таковые имеются).
var serialised = JSON.stringify(obj);
Большое спасибо! –