无法在json中获取变量的值

时间:2016-07-08 12:35:23

标签: javascript c# json ajax

模型

public class AlldataPoints
{
    public string name {get;set;}
    public string phone {get;set;}
    public string phase {get;set;}
}

控制器

public ActionResult GetResults1()
{
    List<AlldataPoints> lst = (List<AlldataPoints>)Session["list"];
    return Json(new { data = lst }, JsonRequestBehavior.AllowGet);
}

脚本

function Pie() {
    $.get("GetResults1", function (abc) {
        var bac = abc;
        for (i = 0; i < bac.length; i++) {
            var hello = bac[0].phase;
        }
    });
} 

由于我的列表有3个数组对象,我想访问每个对象数组的阶段值并将其放入变量hello但是在运行时,hello未定义。

1 个答案:

答案 0 :(得分:2)

正如briosheje在评论中提到的那样,问题可能出在数据类型中。您的控制器返回一个JSON字符串,并直接在您的控制器中使用。您需要确保Javascript获取的数据是一些JSON。

您可以按照建议使用JSON.parse(yourstring)函数,这将确保您实际迭代JSON对象。这里发生的是以下过程:

  • 您的控制器将Json字符串发送到您的JavaScript。
  • 您的JavaScript在http请求中获取字符串$.get("GetResults1", function (abc)
  • 然后将字符串传递给bac:var bac = abc
  • 然后尝试迭代字符串for (i = 0; i < bac.length; i++)
  • 检查0变量(字符串)的索引bac处的值。由于JavaScript是一种非类型语言,因此它遵循并将您的变量视为一个字符数组。所以,它会检查你的第一个角色。
  • 然后,它会尝试访问您角色的phase字段,该字段不存在(undefined)并将其存储到hellovar hello = bac[0].phase (= undefined)。

编辑您可以查看this SO question,它可以很好地解决您的问题。