2011-10-23 100 views
1

我想从MVC3操作中获取JSON结果并将其推送到表行中,但值都未定义。我如何正确解析JQuery ajax请求的JSON结果?来自MVC3的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

什么是你'Image'类是什么样子?你在Firebug中看到了什么? – SLaks

回答

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) { 

     } 
    }) 
+0

工作正常!你的男人!我不得不怀疑,如果GET的变化也使它工作?这还得益于Jesse的建议。任何指针和最佳实践的想法是非常感谢! – likestoski

+0

我认为Get或POST都可以。如果你有敏感信息或大量的信息,你应该通过邮寄发送。提交表格例如应该是POST。 GET通常用于获取实体信息。在这种情况下,您可以在URL中输入一些Id,例如http:// urlToMyAction?Id = 1。此外,我不确定数据属性是否会被忽略,如果你做了一个GET类型的请求,或者如果jQuery的足够聪明,以期望的格式与GET请求的URL url –

+0

我很感激你的意见。我对get和post之间的差异很敏感,因为它们有安全隐患,但是他们绝对正确,他们都工作。 – likestoski

0

你有没有试过对你的动作进行过比对比?

如:

[HttpGet] 
[Authorize] 
public JsonResult GetImageDetails(int id) 
{ 
    Image img = db.Images.First(i => i.ID == id); 
    return Json(img, JsonRequestBehavior.AllowGet); 
} 
0

你是从你的行动返回一个单一的形象,而是把它当作一个数组的客户端。为什么?您是否尝试过检查data并查看实际内容? 我很惊讶map()呼叫作品。

也FYI map()是用于转换给定数组的元素。如果您没有从回调中返回价值,那么您应该使用each()

+0

而不是map()我应该如何获取这些数据呢?我希望我可以做data.ID例如,但也没有定义。 each()代替map()也给了我不明确的地方。 – likestoski