2012-04-13 108 views
-2

我控制器如何从json获取数据?

var subCategories = m_listsRepository.GetSubCategories(id); 
var items = subCategories.Select(x=>new MyDataNameAndId(){Id = x.Value, Name = x.Text}); 
return Json(items); 

和Ajax:

$.ajax({ 
     url: urlString, 
     type: 'POST', 
     data: JSON.stringify({ id: districtId }), 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: 'false', 
     success: function (data) { 
      alert("success"); 
      $.each(data, function (key, MyDataNameAndId) { 
       alert(key);//== 0 
       alert(MyDataNameAndId);// then throws 
       $('select#ChangeOnsubCategoryId').append('<option value="0">Select One</option>'); 

       $.each(MyDataNameAndId, function (index, manager) { 
        $('select#ChangeOnsubCategoryId').append(
          '<option value="' + manager.Id + '">' 
          + manager.Name + 
          '</option>'); 
       }); 
      }); 
     } 
    }); 

我究竟做错了什么?

更新: 控制器工作。 警报(“成功”); - 显示 警报(钥匙); - 显示0 alert(MyDataNameAndId); - 不显示。 我需要在'select#ChangeOnsubCategoryId'选项中生成select#ChangeOnsubCategoryId

这是怎么回事?这个明白吗?

我不知道如何表达什么通过JSON

JSON字符串:

[{"Id":"53","Name":"футбол"}] 
+0

杜,你至少可以告诉我们什么是不工作的。 – alexn 2012-04-13 10:25:05

+0

有问题吗?如果是,那是什么?请解释你的问题,不要只是发布一些代码,让我们找出其余的。在任何情况下,如何访问特定数据结构的属性和数组元素都是本地化的IMO。看看'data'的结构,学习如何访问对象属性并对其进行排序。 – 2012-04-13 10:25:12

+0

你可以发布一个收到JSON的例子吗?如果你在成功回调中使用console.log数据,你又会得到什么? – GillesC 2012-04-13 10:25:48

回答

0

从你写出来的JSON输出,我把它改写这样一点点:

$.ajax({ 
    url: urlString, 
    type: 'POST', 
    data: JSON.stringify({ id: districtId }), 
    dataType: 'json', 
    contentType: 'application/json', 
    cache: 'false', 
    success: function (data) { 
     if (!data) return; // if data is empty, return 

     var $select = $('select#ChangeOnsubCategoryId'); 
      // put the select element in a variable so you don't need to 
      // jquery select it again 

     $select.append('<option value="0">Select One</option>'); 
      // I guess you first want to add a "select one" option 

     // data should be an array e.g. [{"Id":"53","Name":"футбол"}] 
     $.each(data, function (key, manager) { 
      // for each "manager" in the "data" array 

      // manager should be an object in the data 
      // array e.g. {"Id":"53","Name":"футбол"} 
      // no need to for each it 

      $select.append(
        '<option value="' + manager.Id + '">' 
        + manager.Name + 
        '</option>'); 
      // add the manager in the select box 
     }); 
    } 
}); 

虽然我假设的东西。使用JavaScript调试器(例如Chrome中的开发人员工具或Firefox中的Firebug)来检查您从ajax调用中获得的值。将断点放入函数中,然后观察数据变成了什么(在这种情况下,它应该是包含Id和Name的对象数组)。

0
$.each(MyDataNameAndId, function (index, manager) { 
       $('select#ChangeOnsubCategoryId').append(
         '<option value="' + manager.Id + '">' 
         + manager.Name + 
         '</option>'); 
      }); 

应该只是

$('select#ChangeOnsubCategoryId').append(
     '<option value="' + MyDataNameAndId.Id + '">' 
     + MyDataNameAndId.Name + 
     '</option>'); 

的示例代码工作对我来说没有这使我相信有一些错误返回的JSON例外。检查它是否实际返回您发布的字符串。