MVC3的JSON结果未定义

时间:2011-10-23 00:42:09

标签: jquery json asp.net-mvc-3

我正在尝试从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结果吗?建议的方法也有任何浏览器支持问题吗?提前谢谢!

3 个答案:

答案 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()代替。