如何将此Json数组转换为JQuery可读的格式?
问题描述:
这是一个模糊的问题,但我不确定该如何工作。萤火虫说,从我的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帮助排序我的控制器!
答
您的控制器操作错误。你手动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.Id
和this.Value
这里。这假定JSON结果如下:
[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}]
你将不得不适应根据您的实际Category
模型的属性名称。
答
你正在混淆你的ajax返回的数据属性和数据本身。如果你改正了这个问题,$.each
会正常工作。
你返回的数据看起来像这样:
{
"jsonResult": "[
{\"OrderInList\":1},
{\"OrderInList\":2}
]"
}
这意味着是传递给你的成功函数的对象。将其称为data
而不是jsonResult
。
function (data) {
...
$.each(data.jsonResult, function (key, value) {
...
});
});
此外,您的阵列来了通过为字符串,所以你可能需要解析它之前$.each
将能够重复它。
这看起来真的很不错,但现在我收到了一个关于循环引用的500错误(您之前无法知道这个错误)。当我添加一个.Select(x => x.OrderInList)给查询时,我得到了一个关于我的parentCategoryId的不同的错误。Where语句:“值”1“不是”CumbriaMD.Domain.Category“类型,不能用于此泛型集合。
参数名称:值”hrrrm!我认为这就是为什么在首先创建我的查询之后使用linq表达式的原因。 – Kiada 2012-08-12 16:34:23
你在哪里添加'.Select'子句?在'.List'方法调用之后,它是否在LINQ查询的末尾? – 2012-08-12 16:37:47
谢谢,让它现在工作:) – Kiada 2012-08-12 16:53:26