2012-04-02 3 views
1

jQueryを使用してJSON配列からHTML選択メニューを構築するのに役立つ答えがthis questionです。jQuery関数でPHPからJSON配列を読み取る

私のJSON配列は$メニューとしてPHPスクリプトから渡され、次のようになります。

{ "options": [ 
    { "id":"7","name":"Smith, John"}, 
    { "id":"4","name":"Jones, Tom"} 
    ] 
} 

まず、私は私の選択メニューの骨格を構築し、ページに挿入:

var div = '<div class="row">'; 
var label = '<label for="employee">Employee</label>'; 
var select = '<select name="employee id="employee">'; 
var close = '</select></div>'; 
var menu = div + label + select + close; 

$('#clicked_link').prepend(menu); 

それから私はこのようにjQueryのに$メニューの配列を渡ししよう:

var json = '<?php echo $menu; ?>'; 

その後、私はトンにオプションを追加しよう

var options = eval('(' + json + ')'); 
var length = options.length; 

for (var j = 0; j < length; j++) 
{ 
    var newOption = $('<option/>'); 
    newOption.attr('id', options[j].id); 
    newOption.attr('name', options[h].name); 
    $('#employee').append(newOption); 
} 

選択メニューが期待通りまで見せているが、それは何のオプションが含まれていません:彼は、新たにlinked questionからの例を使用して、選択メニューを作成しました。誰が私のエラーをどこに見ているのですか?前もって感謝します。ロケットのソリューションを組み込むために改訂

var json = <?php echo $menu; ?>; 

var options = json.options; 
var length = options.length; 

for (var j = 0; j < length; j++) 
{ 
    var newOption = $('<option/>'); 
    newOption.attr('value', options[j].id); 
    newOption.attr('text', options[j].name); 
    $('#employee').append(newOption); 
} 

答えて

7

あなたがここにeval、あるいはJSON.parseを使用する必要はありません。 JSONは有効なJavaScriptコードです。あなたはこれを行うことができます:あなたが見ることができるよう、

var json = { "options": [ 
    { "id":"7","name":"Smith, John"}, 
    { "id":"4","name":"Jones, Tom"} 
    ] 
}; 

、有効なJavaScriptコードです:

var json = <?php echo $menu; ?>; // Note: the quotes have been removed. 

これは、次のコードになるだろう。

次に、var options = json.optionsを実行できます。

+0

お返事ありがとうございます。私はあなたのソリューションを実装しましたが、同じ結果(空の選択メニュー)を取得しています。私は私のquesitonに更新版を掲載しました。おそらく私のループで何か間違っているのでしょうか? – cantera

+0

@ cantera25:あなたのループには、 'options [h] .list'があります。 'h'とは何ですか?また、 'options'オブジェクトに' list'プロパティもありません。 –

+1

入手しました - [h]はリンクされた質問の受け入れられた回答のタイプミスで、私はそれが正しいと仮定しました。私は今それを編集に行くでしょう。それを[j]に変更し、ループ内の「テキスト」と「値」に切り替えることがそのトリックでした。もう一度すべてに感謝します。 – cantera

2

なぜ

var options = JSON.parse(json).options; 
2

+1ロケットの答えに、あなたのループにもバグがあると思います。ライン

newOption.attr('name', options[h].list);

hが定義されていません。おそらくjが代わりに必要です。またname属性はoptionでは意味がありません。表示される値はtextと設定します。フォームが送信されたときにサーバーに送信される値は、valueと設定します。

関連する問題