0

サーバーからの JSON 応答があり、応答は 3 つの列を持つリスト オブジェクトです。ただし、選択オプション リストを埋めるには、2 つだけ使用する必要があります。クライアントでデータを受信できますが、選択オプション リストを埋めることができません。

Jクエリ

$("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":"殺人の扇動","crimeCatId":4,"crimeTypeId":39},{"crimeTypeDesc":"性的および非性的暴行","crimeCatId":4,"crimeTypeId":40} ,{"crimeTypeDesc":"ポルノ","crimeCatId":4,"crimeTypeId":41},{"crimeTypeDesc":"検閲","crimeCatId":4,"crimeTypeId":42},{"crimeTypeDesc": "法定強姦","crimeCatId":4,"crimeTypeId":43},{"crimeTypeDesc":"HIV の犯罪感染","crimeCatId":4,"crimeTypeId":44},{"crimeTypeDesc":"姦淫","crimeCatId":4,"crimeTypeId":45}]

選択オプション リストに CrimeTypeDesc と CrimeTypeId を入力するだけです。

エラー TypeError: CrimeType.crimeTypeId は定義されていません

4

3 に答える 3

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);
}
于 2013-03-29T16:38:09.233 に答える
1

json オブジェクトを文字列化する必要はありません。これにより、オブジェクトがフラットになり、ドット表記を使用してそのプロパティにアクセスできなくなります。また、他の問題は、これらの値にアクセスしようとしている方法です。CrimeType.crimeTypeId[i] と言いますが、インデックスは、必要な crypeTypeIds 内のどの ID ではなく、crimeType 内のどのオブジェクトを参照しているのかを参照するため、crimeType[i].crimeTypeId を使用する必要があります (いずれにせよ 1 つしかありません)。作業スクリプトから 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);
});
于 2013-03-29T16:45:08.473 に答える
1

関数は JSON オブジェクトを返すため、データを文字列化する必要はありません。jQuery には for each 関数があり、これを使用して配列を処理できます。

success: function(data)
{
  var options = "";
  $.each(data, function(crime)
  {
    options += '<option value="' + crime.crimeTypeId + '">' + crime.crimeTypeDesc + '</option>';
  });
  $("select#offenceTypeId").html(options);
}
于 2013-03-29T16:47:04.407 に答える