今天使用easyui遇到一个很奇怪的问题,接口返回的值明明是Json格式的,但是前端使用js的form组件接受到的始终是string类型。
于是有了下面的操作
1、$.parseJSON(res)
这是jquery自带的处理对象字符串的方法
$(function () {
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
})
需要注意的一点是如果后端返回的是类似这样的值 {“testing”:“1\t2\n3”}, 多数情况下,它会抛出一个错误,因为JS解析器会将字符串中的\t或\n等转义直接视作字面值,起到Tab或换行的效果。
正确写法应该如下(使用两个反斜杠,以免被JS解析器直接转义\t或\n):
$.parseJSON('{"testing":"1\\t2\\n3"}')
2、JavaScript eval() 函数
eval()是一个函数,有且只有一个参数string,为字符串类型
eval(string)
它的特点是若string为js代码时,会直接解析执行,若是普通字符串,则返回原字符串。
如果是js函数代码,eval将字符作为js进行解析,先进行运算,再执行函数。
需要注意的是在解析对象类型的字符串时候,我们不能将他写成 (此处为错误写法)
var jsonstr = "{name:'karl',sex:1,age:22}";
为啥这么写会出错呢?上面我们讲到,eval会解析js代码,而以{ }为开始和结尾的会被误认为js代码执行,所以返回为undifined!
正确写法为:
var jsonstr = "{name:'karl',sex:1,age:22}";
var result =eval("("+jsonstr +")");
OK,解析成为对象成功!