Неопределенный объект при заполнении выпадающего списка с использованием JSON в MVC2

#c# #asp.net-mvc #drop-down-menu

#c# #asp.net-mvc #выпадающее меню

Вопрос:

у меня возникли некоторые проблемы при создании двух выпадающих списков:

  • Область: все области
  • Город: город, который принадлежит выбранному значению области

все в порядке, пока City не прочитает элементы из JSON. Все элементы в выпадающем списке City не определены.

Вот мой код

 $(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.

Ответ №1:

Я не уверен, но я думаю, что здесь конфликтует переменная

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

в enumerator измените data на val , например, как

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

Редактировать: также попробуйте предупредить data[0].value или data[0].description , чтобы убедиться, что строка json правильно проанализирована на стороне клиента, в противном случае вам, возможно, придется вызывать $.parseJson возвращенные данные.

Редактировать 2: одна вещь, которую вы можете попробовать, это использовать цикл for

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

Комментарии:

1. Я использовал alert (data.value), чтобы убедиться, что данные можно просмотреть. и результат не определен, такой же, как в выпадающем списке

2. вы пробовали менять имя переменной с data на val или что-то еще?