使用JSON请求返回的数据填充选项列表

时间:2013-03-29 16:33:23

标签: jquery json

我在服务器上有一个JSON响应,响应是一个包含三列的List对象。但是要填写选择选项列表,我只需要使用两个。我能够在客户端上接收数据但是我无法填写选择选项列表。

Jquery的

$("select#offenceCatId").change(function(){

    $.ajax({
        type:'GET',
        url:'getCrimeTypeList.htm',
        data:{crimeCatId: $(this).val()},

        headers: {
            Accept: 'application/json'
        },
        dataType: 'json',
        success:function(data){
            var crimeType = JSON.stringify(data);
            var options = '';

            for (var i = 0; i < crimeType.length; i++) {
                options += '<option value="' + crimeType.crimeTypeId[i] + '">' + crimeType.crimeTypeDesc[i] + '</option>';
            }
            $("select#offenceTypeId").html(options);
        }
    });
});

JSON数据

[{“crimeTypeDesc”:“Incitement to Murder”,“crimeCatId”:4,“crimeTypeId”:39},{“crimeTypeDesc”:“Sexual and Nonualual Assults”,“crimeCatId”:4,“crimeTypeId” :40},{ “crimeTypeDesc”: “色情”, “crimeCatId”:4 “crimeTypeId”:41},{ “crimeTypeDesc”: “审查”, “crimeCatId”:4 “crimeTypeId”:42},{” crimeTypeDesc“:”Statutory Rape“,”crimeCatId“:4,”crimeTypeId“:43},{”crimeTypeDesc“:”HIV的犯罪传播“,”crimeCatId“:4,”crimeTypeId“:44},{”crimeTypeDesc“ : “通奸”, “crimeCatId”:4 “crimeTypeId”:45}]

我只需要使用crimeTypeDesc和crimeTypeId

填充选择选项列表

错误 TypeError:crimeType.crimeTypeId未定义

3 个答案:

答案 0 :(得分:2)

如果您收到JSON数据,则不希望stringify调用。您应该可以使用以下内容替换success方法:

success:function(crimes){       
    var options = '';

    for (var i = 0; i < crimes.length; i++) {
        var crime = crimes[i];
        options += '<option value="' + crime.crimeTypeId + '">' + crime.crimeTypeDesc + '</option>';
    }
    $("select#offenceTypeId").html(options);
}

答案 1 :(得分:1)

您不需要对json对象进行字符串化,因为这会使对象变平,并且您将无法再使用点表示法来访问它的属性。此外,您的另一个问题是您尝试访问这些值的方式。你说,crimeType.crimeTypeId [i]但你需要使用crimeType [i] .crimeTypeId作为索引引用你所指的crimeType中的哪个对象不是你想要的crypeTypeIds中的哪个id(反正只有一个)这里是一个使用工作脚本减去ajax调用。你需要做的就是用你在小提琴中减去json对象的内容替换你成功回调中的内容。您可以根据需要进行调整。我留下了一个控制台日志,因为我没有你的HTML。

小提琴     http://jsfiddle.net/XJsH2/

$(document).ready(function(){
    var crimeType = [{"crimeTypeDesc":"Incitement To Murder","crimeCatId":4,"crimeTypeId":39},{"crimeTypeDesc":"Sexual and Non Sexual Assults","crimeCatId":4,"crimeTypeId":40},{"crimeTypeDesc":"Pornography","crimeCatId":4,"crimeTypeId":41},{"crimeTypeDesc":"Censorship","crimeCatId":4,"crimeTypeId":42},{"crimeTypeDesc":"Statutory Rape","crimeCatId":4,"crimeTypeId":43},{"crimeTypeDesc":"Criminal Transmission Of HIV","crimeCatId":4,"crimeTypeId":44},{"crimeTypeDesc":"Adultery","crimeCatId":4,"crimeTypeId":45}];
    var options = '';
    for (var i = 0; i < crimeType.length; i++) {
    options += '<option value="' + crimeType[i].crimeTypeId + '">' + crimeType[i].crimeTypeDesc + '</option>';
    }
    console.log(options);
});

答案 2 :(得分:1)

您不需要对数据进行字符串化,因为该函数返回一个JSON对象。 jQuery为每个funktion都有一个,你可以使用它来通过数组。

success: function(data)
{
  var options = "";
  $.each(data, function(crime)
  {
    options += '<option value="' + crime.crimeTypeId + '">' + crime.crimeTypeDesc + '</option>';
  });
  $("select#offenceTypeId").html(options);
}