有人可以帮我弄清楚为什么我的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才能正常工作。提前感谢您的帮助。
答案 0 :(得分:0)
两个问题:
您需要初始化项目:
var items =“”;
您需要将$ .each()回调中的第二个参数从value
更改为item
:
$.each(data, function (name, item) {
items += "<option value='" + item.id + "'>" + item.name + "</option>";
});
这假设您的集合是包含id和name属性的对象列表。
答案 1 :(得分:0)
items
变量。 item
为undefined
,您应该使用已作为参数传递给处理程序的value
属性。您的对象没有id
和name
属性。
var items = '';
$.each(data,function(name,value) {
items += "<option value='"+value.Site_ID+"'>"+value.FirstName+"</option>";
});
$("#clients").html(items);
答案 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将无法解析。