在我的网络服务中,我在方法中返回一个json对象:
{name:'xx'}
我使用ajax发送请求,然后使用'eval'
解析它们onComplete:function(req){
var data=eval(req.responseText);
//do something according data
}
然而,我无法获得'数据'。
当我退回以下字符串时:
[{name:'xx'}]
它有效,我把'数据'作为一个数组。
通过谷歌,我知道它是由返回字符串中的'{'引起的。
所以我想知道是否没有办法重新启动json对象?
答案 0 :(得分:2)
使用JSON.parse
或jquery的$.parseJSON
- 如果使用jquery - 而不是eval。
此外,如果使用jquery,则可以利用内置的ajax方法自动检索并将响应解析为json对象:$.getJson
。
如果您仍然不想修改“逻辑”,可以尝试使用添加的括号来评估您的回复:var data = eval('(' + req.responseText + ')');
答案 1 :(得分:1)
在JSON hijacking上阅读此博客文章。作者解释了您遇到的问题
在与JSON相关时,您可能已经看到过以下代码:
eval('('+JSON_DATA+')');
注意开始和结束括号,这是强制的 JavaScript将数据作为对象而不是块语句执行 上文提到的。如果JavaScript确实尝试执行JSON数据 没有括号和JSON数据确实以“{”开头 然后会出现语法错误,因为块语句将是 无效。
... 有关 ...
的更多信息
您应该使用()
或JSON.parse
,而不是在您的JSON响应中添加$.parseJSON
,而不是像gion_13所说的那样。 Eval不是要走的路。
另外,就像昆汀在评论中所说的那样,你需要更改你正在返回的JSON invalid。您需要引用您的密钥和价值。
答案 2 :(得分:0)
它有效,我把'数据'作为一个数组。
这就是应该做的。 []
是声明数组的语法。如果你想要内部对象,那么只需返回{name: 'XX'}
。