JSON要注意的地方
(2011-11-08 09:37:43)
标签:
json返回数据it |
分类: php那些事 |
一、很简单的将一个数组JSON了。需要指出的是,在非UTF-8编码下,中文字符将不可被encode,结果会出来空值,所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode,
//把传过来的gb2312的数据改为utf-8
三、PHP代码返回的是一个字符串但不是一个对象(一定要注意这个问题)
二、 PHP代码解决乱码问题
$queryString =
$_POST('logname');
$queryString = iconv( 'UTF-8',
'gb2312' , $queryString);//解决传递过来的参数为中文乱码
三、PHP代码返回的是一个字符串但不是一个对象(一定要注意这个问题)
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval_r() 函数传递 String 对象来作为参数。
如果说当eval_r()PHP返回的json不可以将返回的数组转为object对象则用eval_r('('+returnDate+')');
因为是PHP返回的数据是字符串形式的,但不是js里的对象的js所以需要使用eval将返回的数据转换为数组对象形式,然后就直接可以使用returnDate.item2,returnDate.item3....来直接去改数组中的数据(因为json个格式和js的数组格式是一样的)
如果说当eval_r()PHP返回的json不可以将返回的数组转为object对象则用eval_r('('+returnDate+')');
因为是PHP返回的数据是字符串形式的,但不是js里的对象的js所以需要使用eval将返回的数据转换为数组对象形式,然后就直接可以使用returnDate.item2,returnDate.item3....来直接去改数组中的数据(因为json个格式和js的数组格式是一样的)
var dataObj=eval_r("("+data+")");//转换为json对象
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。
由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval_r("{}"); // return undefined
alert(eval_r("({})");// return object[Object]
对于这种写法,在JS中,可以到处看到。
如: (function()) {}(); 做闭包操作时等。
四、如果返回的数据有额外的数据输出,如 {['id':'123123','name','qwqweqwe']}
是一个数组,如果该请求有两个Echo 就会出现 undedined的错误