2013-02-10 55 views
0

在问问题here,我看到下面的代码可用于添加选项来选择JSON结构来填充选项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);” ??

+0

注意:插入一个代码块划分成问题或答案中选择它并按下'{}'按钮,或缩进四个空格。 (不要用''引用它' - 这是'inline code'。) – nnnnnn 2013-02-10 07:03:24

+0

ohh .. okk ..谢谢..我在这里新的..仍然学习..虽然看起来像一个伟大的网站.. – Archer 2013-02-10 07:04:55

回答

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

+1为建议替代方法。 – nnnnnn 2013-02-10 07:23:40

+0

非常感谢您的建议! ..我已经改变了我的代码。但是,还有一个小问题。 SELECT中的所有名称似乎都填充为每个字符......即每个选项一个字符。我究竟做错了什么? – Archer 2013-02-10 07:27:25

+0

@Archer你可以发布这个问题的演示或截图。 – Joseph 2013-02-10 07:31:20

0

要与你已经证明你需要的JSON是一个数组这样的JS使用:

["<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)

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/

+0

这是不对的。您需要将HTML选项元素附加到选择以使它们正常工作。 – 2013-02-10 07:16:33

+0

@EricFreese:我只是在谈论JSON结构,你可以随后在你的html中添加如下内容: $('body')。append($('