Javascript 如何将此Json数组转换为JQuery可读的格式?
这是一个模糊的问题,但我不确定如何才能让它工作。Firebug说我的ajax请求中的Json对象(数组?)如下所示:Javascript 如何将此Json数组转换为JQuery可读的格式?,javascript,jquery,ajax,json,asp.net-mvc-3,Javascript,Jquery,Ajax,Json,Asp.net Mvc 3,这是一个模糊的问题,但我不确定如何才能让它工作。Firebug说我的ajax请求中的Json对象(数组?)如下所示: { "jsonResult": "[ {\"OrderInList\":1}, {\"OrderInList\":2} ]" } 这是通过$.getJSON ajax请求检索的: $.getJSON(“/Json/GetOrderSelectList?parentCategoryId=“+postData,testData,函数(jsonResult)){ $('
{
"jsonResult":
"[
{\"OrderInList\":1},
{\"OrderInList\":2}
]"
}
这是通过$.getJSON ajax请求检索的:
$.getJSON(“/Json/GetOrderSelectList?parentCategoryId=“+postData,testData,函数(jsonResult)){
$('#orderInList选项')。删除();
变量映射={
“TestKey1”:“TestValue1”,
“TestKey2”:“TestValue2”
};
$.each(jsonResult,函数(键,值){
$(“#orderInList”)。追加($(“”+value+“”)
);
});
如果我将$.each(jsonResult)替换为$.each(map),则选择列表将正确填充。否则,我的选择列表只显示“未定义”
我在MVC控制器中序列化此操作中的Json:
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);
}
公共JsonResult GetOrderSelectList(int-parentCategoryId)
{
var结果=会话
.QueryOver()
.Where(x=>x.Parent.Id==parentCategoryId)
.OrderBy(x=>x.OrderInList).Asc
.List();
变量系列化=
选择(r=>new{r.OrderInList});
var jsonResult=JsonConvert.SerializeObject(toSerialize);
返回Json(新的
{jsonResult,
},JsonRequestBehavior.AllowGet);
}
因此,我认为问题可能在于操作响应的Json格式?感谢您的帮助
编辑答案
下面的两个答案对我都有帮助。我似乎无法强式键入变量jsonResult,因此感谢@JBabey指出我在读取json属性时的错误,并在$.each语句中建议函数(key,value)
感谢@Darin Dimitrov帮助整理我的控制器!您将ajax返回的数据属性与数据本身混淆。
$。如果您更正此问题,每个
都可以正常工作
返回的数据如下所示:
{
"jsonResult": "[
{\"OrderInList\":1},
{\"OrderInList\":2}
]"
}
[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}]
这意味着这是传递给success函数的对象。将其称为data
,而不是jsonResult
function (data) {
...
$.each(data.jsonResult, function (key, value) {
...
});
});
此外,您的数组是以字符串形式出现的,因此您可能需要在
$之前对其进行解析。每个都可以对其进行迭代。您将ajax返回的数据的属性与数据本身混淆。$。如果您纠正这一点,每个都可以正常工作
返回的数据如下所示:
{
"jsonResult": "[
{\"OrderInList\":1},
{\"OrderInList\":2}
]"
}
[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}]
这意味着这是传递给success函数的对象。将其称为data
,而不是jsonResult
function (data) {
...
$.each(data.jsonResult, function (key, value) {
...
});
});
此外,您的数组是以字符串的形式出现的,因此您可能需要在$之前对其进行解析。每个都可以对其进行迭代。您的控制器操作是错误的。您在其中手动进行JSON序列化,然后将其作为JSON结果返回,从而以双重JSON序列化结束。您可以直接返回数组和le将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);
}
您必须根据实际的类别
模型调整这些属性名称。您的控制器操作错误。您在其中手动进行JSON序列化,然后将其作为JSON结果返回,从而以双重JSON序列化结束。您可以直接返回数组并保留JSON序列化o 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);
}
您必须根据实际的类别
模型调整这些属性名称。这看起来很不错,但现在我收到了一个关于循环引用的500错误(您以前不可能知道)。当我添加.Select(x=>x.OrderInList)时对于查询,我得到了一个关于parentCategoryId.Where语句的不同错误:“值“1”不是“cumbriand.Domain.Category”类型,不能用于此泛型集合。
参数名称:值”hrrrm!我想这就是为什么我在创建查询后首先使用linq表达式的原因。您在哪里添加.Select
子句?它是在linq查询的末尾,就在.List
方法调用之后吗?这看起来很不错,但是现在我收到一个关于循环引用的500错误(这是您以前不可能知道的)。当我向查询添加.Select(x=>x.OrderInList)时,我得到一个关于parentCategoryId.Where语句的不同错误:“值“1”不是“Cumbriand.Domain.Category”类型,不能在此通用集合中使用。
参数名称:值”hrrrm!我想这就是为什么我在创建查询后首先使用linq表达式的原因。您在哪里添加.Select
子句?它是否在linq查询的末尾,就在.List
方法调用之后?