结果 JSON 数据未定义。如何获取 JSON 数据?

Posted

技术标签:

【中文标题】结果 JSON 数据未定义。如何获取 JSON 数据?【英文标题】:JSON-data get undefined as result. How to get JSON-data? 【发布时间】:2021-09-24 05:43:25 【问题描述】:

我有一个包含位置数据的数据集。在 GetLocation 中,数据被转换为纬度和经度值。这很好用。但是当我返回到 html 页面时。数据未定义。是什么原因?以及如何使用 JSon-data 解决这个问题?

[HttpGet]
        public JsonResult GetLocation(Dictionary<string, string> items)
        

                var result = " 'latitude': '" + latitude + "', 'longitude': '" + longitude + "'";
                return Json(result);
            

在html中:

    if (item.Location == null) 
        $.ajax(
            url: "@Url.Action("GetLocation", "Home")",
            dataType: "json",
            data:  items: item ,
            type: "GET",
            success: (function (data) 
                location = JSON.parse(data);
            )
        );

        console.log("location:");
        console.log(location);

【问题讨论】:

“未定义”是什么意思? data 变量中有什么?此外,您在此处对 JSON 进行双重编码。 action 方法中的Json 函数将字符串编码为JSON。你可以改为return Json(new latitude, longitude ); 数据是 GetLocation-action 的输入。它被解读为带有键和值的字典。输出必须是具有两个值 Latitude 和 Longitude 的对象。 我的意思是success方法中的data参数。 【参考方案1】:

您在此处对 JSON 进行双重编码。 action 方法中的Json() 函数将字符串编码为 JSON,这意味着 javascript 将接收到类似这样的内容(注意整个内容的引号):

" 'latitude': '50.69093', 'longitude': '4.337744'"

你应该这样做:

return Json(new  latitude, longitude , JsonRequestBehavior.AllowGet);

现在在您的成功函数中,您将能够访问这些值:

success: (function (data) 
    location = JSON.parse(data);
    console.log(location.latitude);
)

还要注意添加了JsonRequestBehavior.AllowGet,请参阅here 了解为什么需要这样做。

【讨论】:

谢谢。这是解决方案的一部分。我在 Ajax 调用中添加了 contentType: "application/json"、async: false 和 cache: false。这对我有用。【参考方案2】:

请按以下方式更改

在 MVC 中返回类型:

return Json(new result = result , JsonRequestBehavior.AllowGet);

在 JQuery AJAX 中

位置 = JSON.parse(data.result);

【讨论】:

这仍然会将字符串双重编码为​​ JSON,但现在它嵌套在另一个对象中。这只会让事情变得更糟。所以现在它会返回这个"result":" 'latitude': '50.123', 'longitude': '4.123'"

以上是关于结果 JSON 数据未定义。如何获取 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

select2:使用ajax获取json时“文本未定义”

如何使用angularjs从json文件中获取数据

如何将 json 字符串转换为 ko.observableArray([]),他们得到一个错误数据未定义?

循环遍历 JSON 数组会给出“未定义”的结果 [重复]

无法解析来自 jQuery Ajax POST 的 Json 结果

为啥从 json 操作中检索到的数据显示为未定义?