加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

JSON要注意的地方

(2011-11-08 09:37:43)
标签:

json

返回数据

it

分类: php那些事
一、很简单的将一个数组JSON了。需要指出的是,在非UTF-8编码下,中文字符将不可被encode,结果会出来空值,所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode,
二、 PHP代码解决乱码问题
   $queryString = $_POST('logname');
   $queryString = iconv( 'UTF-8', 'gb2312' , $queryString);//解决传递过来的参数为中文乱码
                                                           //把传过来的gb2312的数据改为utf-8
三、PHP代码返回的是一个字符串但不是一个对象(一定要注意这个问题)
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval_r() 函数传递 String 对象来作为参数。
如果说当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的错误

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有