使用json_encode选择群体选项

时间:2012-12-27 21:24:29

标签: jquery json

有人可以帮我弄清楚为什么我的json数组不是我的选择下拉菜单吗?数组打印正常(名称:值),我尝试了不同的方式(.post .getJSON)来填充选择字段。请参阅下面的代码......

PHP

$q = "select Site_ID, FirstName, LastName from ClientInfo";
$sql = mysql_query($q);
$data = array();
    while($row = mysql_fetch_array($sql, true)){
    $data[] = $row; 
};
echo json_encode($data);

这是它在网页上打印的内容:

[{"Site_ID":"10000001","FirstName":"drew","LastName":"0"},     {"Site_ID":"10000002","FirstName":"hello","LastName":"0"},{"Site_ID":"10000003","FirstName":"hihi","LastName":"0"},{"Site_ID":"10000004","FirstName":"","LastName":"0"},{"Site_ID":"10000005","FirstName":"SueAnn","LastName":"Hall"},{"Site_ID":"10000006","FirstName":"Test","LastName":"Name"}]

带脚本的HTML

<body>
<script type="text/javascript">
$(function(){
  $.getJSON('checkin.php',function(data){
    $.each(data,function(name,value) 
    {
      items+="<option value='"+item.id+"'>"+item.name+"</option>";
    });
    $("#clients").html(items); 
  });
});
</script>

<select id="clients">
<option>Default</option>
</select>
</body>

直到我运行html才能正常工作。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

两个问题:

  1. 您需要初始化项目:

    var items =“”;

  2. 您需要将$ .each()回调中的第二个参数从value更改为item

    $.each(data, function (name, item) {
        items += "<option value='" + item.id + "'>" + item.name + "</option>";
    });
    
  3. 这假设您的集合是包含id和name属性的对象列表。

答案 1 :(得分:0)

  1. 您应该在连接之前定义items变量。
  2. 您的代码中的
  3. itemundefined,您应该使用已作为参数传递给处理程序的value属性。
  4. 您的对象没有idname属性。

    var items = '';
    $.each(data,function(name,value) {
       items += "<option value='"+value.Site_ID+"'>"+value.FirstName+"</option>";
    });
    $("#clients").html(items); 
    
  5. http://jsfiddle.net/5PEPg/

答案 2 :(得分:0)

您需要使用value。您还可以在<option/>循环中创建并附加每个新$.each

$(function(){
  $.getJSON('checkin.php',function(data){
    var lst = $("#clients").empty();
    $.each(data,function(index,value){
        $("<option/>").prop("value", value.Site_ID).text(value.FirstName + " " + value.LastName).appendTo(lst);
    });
  });
});​

这样做也可以防止使用连接字符串解析.html()调用问题。例如,如果某人的名字或姓氏中有双引号,则html将无法解析。

相关问题