getJSON返回值但值不在列表框中添加

时间:2011-04-09 10:08:21

标签: php jquery ajax getjson

我有一个getJSON请求,它返回正确的值,但不添加列表

这是代码

<script type="text/javascript"> 
$(document).ready(function() {
$("select#make").change(function(){
$('div.data_loading').fadeIn();
$.getJSON("getmod.php",{id: $(this).val(), ajax: 'true'}, function(j){
     var options = '';
     for (var i = 0; i < j.length; i++) {
      options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
     }
    $("select#vmod").html(options);
    $('div.data_loading').hide();  
   });
})  

})

</script>

Bellow是从getmod.php返回的值

[{optionValue:13, optionDisplay:156},{optionValue:14, optionDisplay:164},{optionValue:15, optionDisplay:166},{optionValue:16, optionDisplay:GTV-6},{optionValue:17, optionDisplay:Spark},{optionValue:18, optionDisplay:Spider},{optionValue:19, optionDisplay:Graduate},{optionValue:20, optionDisplay:Quadrifoglio},{optionValue:21, optionDisplay:Milano},]

这里是选择框

<select name="vmod" id="vmod" >
</select>

bellow是我的php文件,返回JSON

$id=$_GET['id'];
$sql="select mname,mod from modl where mkd=".$id;
$result=mysql_query($sql);
echo "["; 
for($i=1;$i<=mysql_num_rows($result);$i++)
{
$row=mysql_fetch_array($result);
echo "{optionValue:".$row['mod'].", optionDisplay:". $row['mname']."}";
echo ",";
}
echo "]";

1 个答案:

答案 0 :(得分:4)

您的JavaScript代码看起来不错。

这是服务器的确切响应吗?那么你的JSON无效。字符串值和键必须用双引号括起来(我也不确定尾随的逗号)。粘贴您的JSON here并进行测试。另请查看http://json.org/

这是有效的:

[{"optionValue":13, optionDisplay:156},
 {"optionValue":16, "optionDisplay":"GTV-6"}]

看起来你手动构建了JSON字符串(使用字符串连接和循环)。不要这样做,请改用json_encode

更新:以下是该如何:

$results = array();

while(($row = mysql_fetch_assoc($result))) {
    $results[] = $row;
}

echo json_encode($results);

另请注意,您的代码容易受到SQL注入攻击。您应该在$_GET['id']上使用mysql_real_escape_string。或者更好,使用准备好的陈述。