我正在尝试从MVC3操作中获取JSON结果并将其推送到表行但这些值都是未定义的。如何从JQuery ajax请求中正确解析JSON结果?
这是MVC3动作方法
[HttpPost]
[Authorize]
public JsonResult GetImageDetails(int id)
{
Image img = db.Images.First(i => i.ID == id);
return Json(img);
}
这是JQuery在返回结果后处理结果
$.ajax({
type: "POST",
url: "../Controller/GetImageDetails",
data: "id=" + id,
dataType: "json",
success: function (data) {
$.map(data, function (item) {
$('#tblImages > tbody > tr:first').before("<tr><td>ID:" + item.ID + "</td><td><img src='" + item.ThumbURL + "' alt='" + item.Name + "'/></td></tr>");
});
},
error: function (obj) {
}
})
结果是只有未定义的行。我得到的行数与我正在返回的对象中的属性相同,所以我确定我只是没有正确处理该JSon结果。有人能指出我正确的方向如何处理JSon结果吗?建议的方法也有任何浏览器支持问题吗?提前谢谢!
答案 0 :(得分:1)
看起来您正在尝试在单个对象上使用$ .map。我认为这将最终迭代该对象的属性键。尝试只访问数据对象的对象属性
$.ajax({
type: "POST",
url: "../Controller/GetImageDetails",
data: "id=" + id,
dataType: "json",
success: function (data) {
$('#tblImages > tbody > tr:first').before("<tr><td>ID:" + data.ID + "</td><td><img src='" + data.ThumbURL + "' alt='" + data.Name + "'/></td></tr>");
},
error: function (obj) {
}
})
答案 1 :(得分:0)
您是否尝试过对某个帖子进行操作?
例如:
[HttpGet]
[Authorize]
public JsonResult GetImageDetails(int id)
{
Image img = db.Images.First(i => i.ID == id);
return Json(img, JsonRequestBehavior.AllowGet);
}
答案 2 :(得分:0)
您正在从操作中返回单个图像,但将其视为阵列客户端。为什么?您是否尝试过检查data
并查看其中的实际内容?
我很惊讶map()
通话工作。
此外,FYI map()
用于转换给定数组的元素。如果您没有从回调中返回值,那么您应该使用each()
代替。