无法在下拉列表中正确呈现JSON

时间:2014-12-23 04:12:41

标签: javascript php jquery json

我正在尝试从PHP文件中获取JSON并使用它来填充下拉框。

我从PHP文件中获得JSON就好了。它看起来像这样:

[{"state":"AL"},{"state":"AK"},{"state":"AZ"},{"state":"AR"}]

我可以在开发人员工具的响应中看到它已经过时了。但是,当我查看JSON时,第1行是空的,一切都在第2行。不确定这是否是一个问题。

在HTML方面,这就是我所拥有的:

<select id="myselect"></select>

 $.getJSON('state_get.php', function(data) {               
   $.each(data, function(key, val) {
    $('#myselect').append("<option>"+key.text+"</option>");
})
 });

我在下拉列表中得到的是“未定义”的一系列选项。每个JSON值似乎都有一个,所以某些方面正确,但不是一直都是。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:3)

每个回调的第一个参数是索引,第二个是值,属性的关键字是State而不是text

$.getJSON('state_get.php', function (data) {
    $.each(data, function (key, val) {
        $('#myselect').append("<option>" + val.state + "</option>");
    })
});

答案 1 :(得分:2)

您的对象具有属性state,而不是text

$.each(data, function(key, val) {
  $('#myselect').append("<option>" + val.state + "</option>");
});

答案 2 :(得分:2)

循环数组时$.each的第一个参数是index,第二个是数组的元素

尝试

$('#myselect').append("<option>"+val.state+"</option>");

数组中的每个对象都是一个元素

参考jQuery.each() API Docs

答案 3 :(得分:0)

试试这个

$('#myselect').append("<option>"+val.state+"</option>");

答案 4 :(得分:0)

让我们有下拉列表

<select id="myselect" name="stateList" class="state-list ></select>

你可以像这样追加你的价值

var stateSelector = $('select.state-list'); 
var option = $("<option value=''></option>"); 

$.each(data, function(key, val) {
option = $("<option value='" + val.state + "'>" + val.state + "</option>"); 
stateSelector.append(option);           
}); 

$('.state-list').selectpicker('refresh'); //您可以根据需要刷新下拉列表