<code class="language-javascript"> var user = '{name:"张三",age:23,'+ 'address:{city:"青岛",zip:"266071"},'+ 'email:"iteacher@haiersoft.com.cn",'+ 'showInfo:function(){'+ 'document.write("姓名:"+this.name+"
");'+ 'document.write("年龄:"+this.age+"
");'+ 'document.write("地址:"+this.address.city+"
");'+ 'document.write("邮编:"+this.address.zip+"
");'+ 'document.write("E-mail:"+this.email+"
");} }'; var u = eval('('+user+')'); u.showInfo();
1、对于服务器返回的JSON字符串,如果jquery异步请求没有指定类型javascript 对象 json,或者以字符串的形式接受,那么需要将其作为对象来处理。 方法也不算太麻烦,就是把字符串放在 eval() 中执行一次。 该方法也适合用普通的javascipt方法获取json对象。 下面的例子说明:
var u = eval('('+用户+')');
为什么要在这里添加 ('('+user+')') " 到 eval 呢?
原因是:eval本身的问题。 由于json以“{}”的形式开始和结束,在JS中,会被视为语句块,所以必须强制转换为表达式。
添加括号的目的是强制eval函数在处理JavaScript代码时将括号中的表达式(表达式)转换为对象,而不是作为句子(语句)执行。 举个例子,比如对象字面量{},如果不加内括号,那么eval就会把大括号识别为JavaScript代码块的开始和结束标签,那么{}就会被认为执行一个空的句子。 所以下面两个执行结果是不同的:
Alert(eval("{}"); // 返回未定义
Alert(eval("({})");// 返回对象[Object]
2、对于服务器返回的JSON字符串,如果jquery异步请求将type(通常是这个配置属性)设置为“json”,或者使用$.getJSON()方法获取服务器返回,则eval()不需要方法,因为此时得到的结果已经是一个json对象了javascript 对象 json,直接调用该对象即可。 这里以$.getJSON的方法为例来说明数据处理方法:
$.getJSON("http://www.qk12333.com/",{param:"jcuckoo"}, function(data){
//这里返回的数据已经是一个json对象
//以下其他操作与第一种情况相同
$.each(data.root,函数(idx,item){
如果(idx==0){
return true;//与countinue相同,返回false与break相同
Alert("名称:"+item.name+",值:"+item.value);
});
});
这里非常需要注意的是,表格1中的eval()方法动态执行字符串(可能是js脚本),很容易导致系统安全问题。 因此,可以使用一些避免使用 eval() 的第三方客户端脚本库。 例如JavaScript中的JSON提供了不超过3k的脚本库。
第二种分析方法是使用Function对象来完成,其典型应用是JQUERY中AJAX模式下成功等返回数据的分析
var json='{"姓名":"用户名","年龄":28}';
数据 =(new Function("","return "+json))();
此时的数据是一个将要解析的json对象。