我需要序列化一個關聯的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只適用於更現代的瀏覽器?除非你包含一個腳本引用到[json2.js](https://github.com/douglascrockford/JSON-js)? –
@AshClarke取決於您對現代瀏覽器的定義。它受到所有當前和最近瀏覽器的支持。如果你需要_legacy_支持使用json2(我已經添加了鏈接) – Raynos
@Raynos不會'let arr = []; a ['foo'] ='酒吧'; JSON.stringify(a);'將其字符串化爲'[]' – ShrekOverflow
你可以用JSON library(或本機JSON object如果可用)連載了。
var serialised = JSON.stringify(obj);
非常感謝! –