作家
登录

JavaScript的eval JSON object问题

作者: 来源:www.28hudong.com 2013-03-30 02:08:31 阅读 我要评论

通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。 在我刚遇到这个问题的时候也特别头痛,因为看起来所有编码是正确的,为了测试出现问题的位置,我逐渐缩小代码范围,最终得到如下简短代码: 复制代码 代码如下: var jsonStr1 = '{"Name":"Tom","Sex":"Man"}'; var jsonObj1 = eval(jsonStr1); alert(jsonObj1.Name); 以上代码执行正是报一开始说的invalid labe错误。难道eval函数对某些表达式或对象有限制?于是我又测试了数组对象,代码如下,结果下面代码运行很正常: 复制代码 代码如下: var arrStr = '["Tom","Man"]'; var arrObj = eval(arrStr); alert(arrObj[0]); 难道是我机子上的JavaScript解析器就JSON解析方面出了问题,于是我又测试下面代码,但结果一样正常: 复制代码 代码如下: var jsonObj = {"Name":"Tom","Sex":"Man"}; alert(jsonObj.Name); 最终我还是没有自行把问题解决,于是根据相关错误信息上网搜索答案,没想到一下子就找到了问题的根源,解决办法就是“在eval的时候,要先把 JSON字符串值用 ‘()'括号先括起来”。网上找的资料都没有说明是什么原因,当然我也还是没有明白正真的原因的。括号是起强制先执行或先运算作用的,返回的JSON就一个完整的对象,中间也没有表达式,为什么还要加括号!像数组这种较复杂点的对象也能正常eval。没办法,就先记着这种用法吧。正确用法如下(注意看eval两端的括号): 复制代码 代码如下: var jsonStr2 = '{"Name":"Tom","Sex":"Man"}'; var jsonObj2 = eval('(' + jsonStr2 + ')'); alert(jsonObj2.Name);

  推荐阅读

  javascript实现拖拽并替换网页块元素

找了一些现成的插件,发现都不太符合我的需求,于是参考网上的例子自己实现了一个,还没有优化。 还是贴代码吧: dragtoreplace DragToReplaceDeom #displayRoom{background:#eee;position:relative;f>>>详细阅读


本文标题:JavaScript的eval JSON object问题

地址:http://www.17bianji.com/kaifa2/JS/27681.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)