2011-06-22 14 views

答えて

6

をサポートするための

使用json-jsは、「連想配列」のための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

+0

ありがとうございました! –

2

JSON.stringify(object)

追記何ら連想配列が存在しないオブジェクトのみが存在します。一般的にはIE6やIE7などのレガシーブラウザに

+0

最新のブラウザでのみJSON.stringifyを使用できますか? [json2.js](https://github.com/douglascrockford/JSON-js)へのスクリプトリファレンスを含めない限り? –

+0

@AshClarkeは、最新のブラウザーの定義に依存します。これは現在のブラウザーと最近のブラウザーでサポートされています。_legacy_サポートが必要な場合は、json2を使用してください(私は既にリンクを追加しています) – Raynos

+0

@Raynosは 'let arr = []; a ['foo'] = 'bar'; JSON.stringify(a); 'string [']' – ShrekOverflow

5

あなたはJSON library(またはネイティブJSON object利用可能な場合)とそれをシリアライズできます。

var serialised = JSON.stringify(obj);