用于填充SELECT选项的JSON结构

时间:2013-02-10 07:00:53

标签: javascript html json

在问here的问题中,我看到以下代码可用于向SELECT添加选项

function getResults(str) {
  $.ajax({
        url:'suggest.html',
        type:'POST',
        data: 'q=' + str,
        dataType: 'json',
        success: function( json ) {
           $.each(json, function(i, optionHtml){
              $('#myselect').append(optionHtml);
           });
        }
    });
};

有人可以告诉我,json应该是什么格式,在php服务器端。比如,应该如何创建,以便“$('#myselect')正确解析它。append(optionHtml);” ??

3 个答案:

答案 0 :(得分:4)

该代码将解析此JSON,基本上是带有标记的字符串数组。

[
    "<option value='...</option>",
    "<option value='...</option>",
    "<option value='...</option>",
    ...
]

这几乎打败了JSON的目的。


如果JSON只包含数据,那会更好:

{
    "text1" : "value1",
    "text2" : "value2",
    "text3" : "value3",
    ...
}

和你的代码解析它并为你创建元素。这样,JSON就更轻了。

success: function( json ) {
    var mySelect = $('#myselect')
    $.each(json, function(key,val){
        $('<option/>',{
            value : val //i like this method of making elements better
        })              //because string concatenation is messy
        .text(key)
        .appendTo(mySelect);
    });
}

答案 1 :(得分:0)

要使用JS,你已经证明你需要JSON成为这样的数组:

["<option value='Woodland Hills'>Woodland Hills<\/option>","<option value='none'>none<\/option>","<option value='Los Angeles'>Los Angeles<\/option>","<option value='Laguna Hills'>Laguna Hills<\/option>"]

...其中每个数组元素是单个<option>元素的适当html。

(就像其他问题中显示的第一个JSON一样。)

答案 2 :(得分:0)

JSON是键值/名称对的集合。它们可以是对象或数组的形式,也可以是两者。

让我假设您想要有两个下拉列表,第一个下拉列表包含国家/地区,第二个下拉列表包含该特定国家/地区的城市。在这种情况下,JSON结构如下所示:

{
  "<select value='usa'>USA</select>": "<option value='boston'>Boston</option>",
  "<select>FRANCE</select>": "<option value=paris'>Paris</option>",
  "<select>UNITED KINGDOM</select>": "<option value=london'>London<option value=not'>Nottingham</option>",
  "<select>GERMANY</select>": "<option value='munich'>Munich</option>"
}

JSON在http://jsonlint.com/

验证