通过json数组获取值

时间:2012-02-13 06:05:21

标签: javascript jquery json jsp

我从数据库中获取一些数据,并希望在javascript中的组合中显示这些值,但是组合框没有填充任何值,也许我在json或javascript中做错了,有人能告诉我哪里错了吗?从db 5开始,while循环

JSONObject jsonObj= new JSONObject(); 

List<String> myList = new ArrayList<String>();
while(rs.next()){
t1=rs.getString(1);
myList.add(t1);
 jsonObj.put("name",myList.toArray());
}
response.setContentType("application/json");
response.getWriter().write(jsonObj.toString());

希望在javascript中获得以上值

<script type="text/javascript">
  $(document).ready(function() {
$("#combo").change(function() {
$.getJSON('combo.jsp', {count : this.value}, function(responseData) {
$("#combo1").empty().append ("<option>please select</option>");
var json = $.parseJSON(responseData);
var myValues = json.name;
for (var idx in myValues) {
$("#combo1").append(
    $("<option></option>").html(myValues[idx]).val(myValues[idx])
);
}
});
});          
    </script>

请任何人至少给我一些想法,我无法找到任何解决方案

3 个答案:

答案 0 :(得分:2)

  1. 语法错误
  2. 使用parseJSON 检索数据时,不需要
  3. getJSON

    假设响应json是结构:     {name = {prop1:value1,prop2:valu2,prop3:value3 .....}}

        $(document).ready(function () {
            $("#combo").change(function () {
                $.getJSON('combo.jsp', {
                    count: this.value
                }, function (responseData) {
                    $("#combo1").empty().append("<option>please select</option>");
                    var myValues = responseData.name;
                    for (var idx in myValues) {
                        $("#combo1").append(
                        $("<option></option>").html(myValues[idx]).val(myValues[idx]));
                    }
                });
            });
        });
    

    或者如果结构是:     {name = [value1,valu2,value3,.....]}

        $(document).ready(function () {
            $("#combo").change(function () {
                $.getJSON('combo.jsp', {
                    count: this.value
                }, function (responseData) {
                    $("#combo1").empty().append("<option>please select</option>");
                    var myValues = responseData.name;
                    for (var i=0; i < myValues.length; i++) {
                        $("#combo1").append(
                        $("<option></option>").html(myValues[i]).val(myValues[i]));
                    }
                });
            });
        });
    

答案 1 :(得分:0)

我不知道您使用的是哪种浏览器。但afaik,使用innerHTML直接插入HTML不适用于某些浏览器。 你应该这样试试:

$("#combo1")[0].options.add(new Option(label, value));

label表示字符串内部“选项” value表示“选项”的属性“值”

在您的代码中:

for (var i = 0, val; val = myValues[i]; i++)
{
    $("#combo1")[0].options.add(new Option(val, val));
}

答案 2 :(得分:0)

我怀疑你是从你的getJSON CALL获取值。使用Firebug来查看你是否得到了你的ajax调用的响应。并使用console.log(responseData);内部$ .getJSON('combo.jsp',{count:this.value},function(responseData){

的console.log(responseData); });

嗨试试这个:

var options = '';
$.getJSON('combo.jsp', {
    count: this.value
}, function (responseData) {
    $.map(responseData, function (item) {
        console.log(item);
        //alert(item.code);
        options += '<option value="' + item.code + '">' + item.description + '</option>';
    });
}
);
$("#combo").html(options);