2011-10-23 131 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