代码说

code is poetry

代码说    
碎碎念:从明天起做一个幸福的人,喂马劈柴周游世界。  换一换

关于eval函数处理json字符串数据的说明

作者:coderzheng 发布于:2014-4-11 22:52 Friday 分类:javascript  阅读模式

来看一个典型的ajax实例:

HTML端:

PHP端:

运行html文件,点击按钮,结果如下:

打开chrome浏览器的网页调试器,我们能很清楚地看到从php端传递到html端的数据如下:

我们对php端的程序做如下改动:

再次运行原来的html页面,页面不再输出任何东西,打开控制台,可以看到错误信息如下:

我们来仔细分析一下这种情况是如何发生的:

第一个php程序输出的json字符串是:[{"id":"2"}], 经过eval函数的处理正确解析成了json对象。

第二个php程序输出的json字符串是:{"id":"yangzheng","sex":"male"},这次eval函数处理失败了。它无法将这个字符串正确解析成json对象了。

总结如下:

当在php端使用传统的方法从数据库中取结果集时,由于所得到的总是一个二维数组, 因此字符串总是这种形式的[{},{},{}...] (数组形式的),即使结果集中只有一组值也是这样因为[](中括号)本身就可以作为表达式。因此在转换时,直接使用eval(str)不会出现错误,但是这种情况不具有通用性。因为如果在php端定义一个一维数组然后传送相应的json格式字符串(如上第二个php程序中的情况)。这时候再在js端使用这条语句 var json = eval(json)就会出错,原因是:此时传递的值已经不是[{},{},{}...]这种形式了,而是这种形式:{"":"","":""...},这种形式的字符串不能作为表达式或者语句,不能作为eval()函数的参数。 因此执行eval()函数时就会出错。为了避免这种情况的发生,统一使用下面的方法来解决:
var o = eval("("+str+")"); 这种方式对任何类型的json字符串都有效,因为小括号可以作为表达式来使用。

标签: javascript ajax

你可以发表评论、引用到你的网站或博客,或通过RSS 2.0订阅这个博客的所有文章。
上一篇: jquery中使用get或者post方式进行ajax时的一个bug  |  下一篇:php异常 - 快速入门