结果 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 数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json 字符串转换为 ko.observableArray([]),他们得到一个错误数据未定义?