在客户端循环json数据

时间:2014-11-23 16:15:01

标签: jquery json asp.net-mvc-4

我的控制器中有一个方法,它将json字符串返回给浏​​览器。我试图从json读出值,但没有运气。第一步是创建一个简单的警报,它将显示名字。有人可以看看。感谢。

控制器Json生成:

"[{\"FirstName\":\"Mic\",\"LastName\":\"Muffin\"},{\"FirstName\":\"Eddie\",\"LastName\":\"Munchie\"},{\"FirstName\":\"Hollowin\",\"LastName\":\"Wolf\"}]"

我的控制器:

[HttpPost]
public JsonResult GetNames() {
    List<Person> p = new List<Person>();
    p.Add(new Person()
    {
        FirstName = "Mic",
        LastName = "Muffin"
    });
    p.Add(new Person() { 
        FirstName = "Eddie",
        LastName = "Munchie"
    });
    p.Add(new Person() { 
        FirstName = "Hollowin",
        LastName = "Wolf"
    });
    JavaScriptSerializer jss = new JavaScriptSerializer();
    string n = jss.Serialize(p);
    return Json(n, JsonRequestBehavior.AllowGet);
}

客户端:

<script type="text/javascript">
    $(document).ready(function () {
        $.post("/Home/GetNames", {}, function (data) {
            var x = data;
            $.each(x).alert(x.FirstName);
        }, "json");
       //$.post("/Home/GetNames", { }, function (data) {
       //   alert(data);
       //}, "json");
     });
 </script>

2 个答案:

答案 0 :(得分:1)

实际上,您不需要在控制器中序列化为JSON,这就是您在JavaScript中获取字符串的原因,而jQuery无法自动将响应解析为对象。所以,只需修复你的行动,一切都会很酷:

[HttpPost]
public JsonResult GetNames() {
    List<Person> p = new List<Person>();
    p.Add(new Person()
    {
        FirstName = "Mic",
        LastName = "Muffin"
    });
    p.Add(new Person() { 
        FirstName = "Eddie",
        LastName = "Munchie"
    });
    p.Add(new Person() { 
        FirstName = "Hollowin",
        LastName = "Wolf"
    });

    return Json(p, JsonRequestBehavior.AllowGet);
}

无论如何,要将字符串反序列化为JavaScript中的对象,您应该使用JSON.parse方法:

var x = JSON.parse(data)

答案 1 :(得分:0)

经过几次调试后,我注意到我哪里出错了。控制器完成了它的工作。但是在客户端,我需要更进一步才能获得我需要的数据。所以这段代码适合我。

    $.post("/Home/GetNames", {}, function (data) {
        for (var i = 0; i < data.length; i++) {
            alert(data[i].FirstName);
        }