我的控制器中有一个方法,它将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>
答案 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);
}