【问题标题】:not able to get value of a variable in json无法在json中获取变量的值
【发布时间】:2016-07-08 12:35:23
【问题描述】:

型号

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 未定义。

【问题讨论】:

  • 您正在返回一个 JSON 字符串,但您没有在 javascript 中解析它,因此您正在尝试访问字符串的某些属性。您应该改为使用以下内容解析结果:var bac = JSON.parse(abc);。另外,请记住,将解析一个对象,您可能首先要检查是否首先获得结果(通过执行 console.log(abc); 然后,通过执行其余操作。
  • 数据正在存储在 bac 中
  • 我知道,但是您必须考虑 什么数据 存储在 bac 中。它目前是一个字符串,如果你想遍历它并获取它的属性,你需要先将它转换为一个对象。
  • 数据存储为数组[n]
  • 每个索引都显示为对象

标签: javascript c# json ajax


【解决方案1】:

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

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

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

EDIT您可以检查为this SO question,它很好地涵盖了您的问题。

【讨论】:

  • 有充分理由和解释性的答案。
猜你喜欢
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2017-10-12
相关资源
最近更新 更多