2012-08-12 113 views
0

這是一個模糊的問題,但我不確定該如何工作。螢火蟲說,從我的Ajax請求的JSON對象(數組?)是這樣的:如何將此Json數組轉換爲JQuery可讀的格式?

{ 
"jsonResult": 
"[ 
    {\"OrderInList\":1}, 
    {\"OrderInList\":2} 
]" 
} 

這是通過$ .getJSON Ajax請求通過檢索:

$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, testData, function (jsonResult) { 
     $('#orderInList option').remove(); 

     var map = { 
      "TestKey1": "TestValue1", 
      "TestKey2": "TestValue2" 
     }; 

     $.each(jsonResult, function (key, value) { 
      $("#orderInList").append($("<option value=" + key + ">" + value + "</option>") 
      ); 
     }); 

如果我更換$。每個( jsonResult)與$ .each(地圖)選擇列表正確填充。否則,我的選擇列表只會說'未定義'。

序列化JSON的這個動作在我的MVC控制器:

public JsonResult GetOrderSelectList(int parentCategoryId) 
    { 
     var result = Session 
      .QueryOver<Category>() 
      .Where(x => x.Parent.Id == parentCategoryId) 
      .OrderBy(x => x.OrderInList).Asc 
      .List(); 

     var toSerialize = 
      result.Select(r => new {r.OrderInList}); 

     var jsonResult = JsonConvert.SerializeObject(toSerialize);        
     return Json(new 
         { jsonResult, 
         }, JsonRequestBehavior.AllowGet); 

    } 

所以我覺得問題可能的Json的行動與迴應格式?任何幫助感謝!下面

編輯答案爲

的答案都幫助了我。我似乎無法強烈地鍵入變量jsonResult,所以感謝@JBabey指出了我在閱讀json屬性時的錯誤,並在$ .each語句中建議了函數(鍵,值)。

感謝@Darin Dimitrov幫助排序我的控制器!

回答

2

您的控制器操作錯誤。你手動JSON序列化,然後返回這個作爲JSON結果,從而結束了一個雙JSON序列化。您可以直接返回數組和離開JSON序列化管道的ASP.NET MVC框架:

public ActionResult GetOrderSelectList(int parentCategoryId) 
{ 
    var result = Session 
     .QueryOver<Category>() 
     .Where(x => x.Parent.Id == parentCategoryId) 
     .OrderBy(x => x.OrderInList) 
     .Asc 
     .List(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

然後:

$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, testData, function (jsonResult) { 
    $('#orderInList option').remove(); 
    $.each(jsonResult, function() { 
     $('#orderInList').append(
      $("<option value=" + this.Id + ">" + this.Value + "</option>") 
     ); 
    }); 
}); 

請注意,我用的this.Idthis.Value這裏。這假定JSON結果如下:

[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}] 

你將不得不適應根據您的實際Category模型的屬性名稱。

+0

這看起來真的很不錯,但現在我收到了一個關於循環引用的500錯誤(您之前無法知道這個錯誤)。當我添加一個.Select(x => x.OrderInList)給查詢時,我得到了一個關於我的parentCategoryId的不同的錯誤。Where語句:「值」1「不是」CumbriaMD.Domain.Category「類型,不能用於此泛型集合。
參數名稱:值」hrrrm!我認爲這就是爲什麼在首先創建我的查詢之後使用linq表達式的原因。 – Kiada 2012-08-12 16:34:23

+0

你在哪裏添加'.Select'子句?在'.List'方法調用之後,它是否在LINQ查詢的末尾? – 2012-08-12 16:37:47

+0

謝謝,讓它現在工作:) – Kiada 2012-08-12 16:53:26

1

你正在混淆你的ajax返回的數據屬性和數據本身。如果你改正了這個問題,$.each會正常工作。

你返回的數據看起來像這樣:

{ 
    "jsonResult": "[ 
     {\"OrderInList\":1}, 
     {\"OrderInList\":2} 
    ]" 
} 

這意味着是傳遞給你的成功函數的對象。將其稱爲data而不是jsonResult

function (data) { 
    ... 
    $.each(data.jsonResult, function (key, value) { 
     ... 
    }); 
}); 

此外,您的陣列來了通過爲字符串,所以你可能需要解析它之前$.each將能夠重複它。