在MVC2中使用JSON填充下拉列表时未定义对象

本文关键字:下拉列表 未定义 对象 填充 JSON MVC2 | 更新日期: 2023-09-27 18:11:01

我在制作两个下拉列表时遇到了一些麻烦:

  • 区域:所有区域
  • 城市:属于区域
  • 所选值的城市

一切都很好,直到City从JSON读取项目。未定义

这是我的代码

$(document).ready(function () {
        $('#AreaList').change(function () {
            $.ajaxSetup({ cache: false });
            var selectedItem = $(this).val();
            if (selectedItem == "" || selectedItem == 0) {
                //Do nothing
            } else {
                $.ajax({
                    url: '<%=Url.Content("~/") %>Administration/GetDropDownCity',
                    data: { item: $("#AreaList> option:selected").attr("value") },
                    dataType: 'json',
                    traditional: true,
                    type: 'POST',
                    success: function (data) {
                        var items = "";
                $.each(data, function (i, data) {
                    items += "<option value='" + data.value + "'>" + data.description + "</option>";
                });
                $("#CityList").html(items);
                $("#CityList").removeAttr('disabled');
                    }
                });
            }
        });
    });

Json确实存在,我检查了Firebug并列出如下:

"[{'"value'":'"107'",'"description'":'"KOTA DEPOK'"},{'"value'":'"141'",'"description'":'"KOTA JAKARTA SELATAN'"}]"
有什么办法可以解决这个问题吗?

编辑

问题解决了:我使用jQuery.parseJSON()读取JSON

在MVC2中使用JSON填充下拉列表时未定义对象

我不确定,但我认为这里有一个变量冲突

$.each(data, function (i, data) {
                    items += "<option value='" + data.value + "'>" + data.description + "</option>";
                });

将枚举器中的data更改为val,例如

$.each(data, function (i, val) {
                    items += "<option value='" + val.value + "'>" + val.description + "</option>";
                });

Edit:也尝试警告data[0].valuedata[0].description,以确保json字符串在客户端正确解析,否则您可能不得不调用$.parseJson返回的数据。

Edit 2:你可以尝试使用for循环

for(i=0;i<data.length;i++)
{
   items += "<option value='" + data[i].value + "'>" + data[i].description + "</option>";
}