首页 新闻 会员 周边

eval解析不了我后台返回的json数据,求帮助,后台应该怎么写!下面是我目前写的后台代码

0
悬赏园豆:10 [已解决问题] 解决于 2014-08-25 17:03

public ActionResult GetValue(string id)
{
var query = from a in db.SysMenu
select new {
a.ID,
a.ParentId,
a.Title,
a.Url,
a.Icon,
a.Sort,
a.CreateDate
};

if (string.IsNullOrEmpty(id))
{
int iid = Convert.ToInt32(id);
query = query.Where(a => a.ID == iid);
}
return Json(query, JsonRequestBehavior.AllowGet);

}

孤独狂少的主页 孤独狂少 | 初学一级 | 园豆:35
提问于:2014-08-20 16:45
< >
分享
最佳答案
0

你把eval的功能弄混了。

eval是执行语句的功能,把一条以字符串形式表示的语句转换并执行。

json返回的是一个数据对象格式的字符串,这个字符串是不能简单通过eval处理的。

你应该使用json的转换字符串转object函数。

收获园豆:2
519740105 | 大侠五级 |园豆:5810 | 2014-08-21 08:47

具体需要怎么转呢大哥

孤独狂少 | 园豆:35 (初学一级) | 2014-08-21 13:00

@孤独狂少: 如果有jQuery,则使用jQuery.JSON.Parse,如果没有,就引用或者单独使用JSON的js代码。

别去使用eval来转换,虽然也可以:

var json = '{a:5}';

var expression = "o=" + json;

eval(expression);

alert(o.a)//此处应该弹出5

519740105 | 园豆:5810 (大侠五级) | 2014-08-21 13:47

 @孤独狂少: 

给个更复合json格式字符串的例子:

 

<html>
<head>
<script>
var json = "{'a':5,'b':[3,5,{'d':8}]}";

var expression = "o=" + json;
alert(expression);
try
{
eval(expression);
alert(o.a);
alert(o.b.length);
alert(o.b[2].d);}
catch(e) { alert(e.message); } </script> </head> <body> </body> </html>
519740105 | 园豆:5810 (大侠五级) | 2014-08-21 14:01

@519740105: 谢谢!

孤独狂少 | 园豆:35 (初学一级) | 2014-08-25 17:01
其他回答(6)
0

你把接收到的json串贴出来

收获园豆:1
乐享程序员 | 园豆:930 (小虾三级) | 2014-08-20 16:49

接受的全是object但是医用eval转就什么反应都没有了

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-20 17:00

@孤独狂少: 

那要么不使用eval,要么:

eval('result='+YourJsonStr);

然后使用result

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-20 17:02

@螺 丝 钉: 我已经弄出来了,没有用到eval虽然没有得到更好的答案,但是还是谢谢啦!

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-25 17:01
0

你应该贴前台代码,这样的数据过去,直接就是json数据了。

收获园豆:2
幻天芒 | 园豆:37175 (高人七级) | 2014-08-20 17:35

//tree树节点编辑
function penail() {
var t = $('#treeMenu');
var node = t.tree('getSelected');
if (node) {
$.get("/System/GetValue", { id: node.id }, function (data) {
//弹出编辑对话框
$("#pencailDlg").dialog('open');
//情况form表单的值
$("#pencailForm").form('clear');
//eval()将json字符串解析成json对象
var data = eval( '('+ data + ')');
console.info(data);
alert(data);
if (data) {
if (data.parentId != '0')
$("#itxtPtitle").val();
$("#itxtTitle").val(data.Title);
$("#itxtUrl").val(data.Url);
$("#itxtIcons").val(data.Icon);
$("#itxtSort").numberbox('setValue',data.Sort);
}
});
}
}

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-20 17:36

@孤独狂少: 你可以直接把data输出来,不需要eval。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-08-20 17:39

@幻天芒: 不要eval是可以输出来的,输出object,但是有了这个就不知道是怎么回事

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-20 17:41

@孤独狂少: 因为你那种写法,直接到前台就已经是json对象了。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-08-20 19:51

@幻天芒: 可是不知道为什么就是获取不了对象里面的值

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-20 21:07

@孤独狂少: 不至于吧,你用Chrome的控制台看看,难道也没有值么?

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-08-20 21:08
0

你如果要解析直接用JSON.Parse就OK了 一般不用Eavl做解析  只是做 函数 的处理

收获园豆:1
望着天的蜗牛 | 园豆:354 (菜鸟二级) | 2014-08-20 21:03
0

还是查看下http请求响应的是什么 结果吧 一般都会 包含在 {d[]} d 这个里面 解析时 需要 eval('('+data.d+')');

收获园豆:2
Zery | 园豆:6151 (大侠五级) | 2014-08-21 07:21

虽然没有得到答案,但是我已经弄出来了,也谢谢大家了啊!

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-25 17:02
0

不用eval.

收获园豆:1
晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-21 14:41
0

建议你先使用浏览器查看一下源码解析情况;其次,我们在一般将json格式的数据传到页面之前,先要转换为Object对象,然后把该对象返回到页面,在使用脚本代码进行显示……

收获园豆:1
白志伟 | 园豆:250 (菜鸟二级) | 2014-08-25 14:53

谢谢啦!

支持(0) 反对(0) 孤独狂少 | 园豆:35 (初学一级) | 2014-08-25 17:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册