正在进行安全检测...

发布时间:2023-11-09 01:53:20   来源:文档文库   
字号:
百度文库-让每个人平等地提升自我!

phpjs如何通过json互相传递数据

当我们在结合phpjavascript实现某些功能时,经常会用到jsonjsonjs的一种数据格式,可以直接被js解析。而php无法直接读取json数据,但是php提供了json_decode函数来对json数据进行转化,从而可以被php脚本访问。同时,php也提供了json_encode函数来将数据转化成json格式。那么,js中的原生jsonphp中通json_encode函数转化后的json是否完全一样呢?今天,站长就和大家一起来探讨这个问题。
我们通过phpjavascript传递数组数据时,通常要将其转化为json格式,以便javascript来获取,那么我们就以数组为例,先来看一下两者之间的区别。1、一维数组
考虑php数组$array=array("1","2","3";使用json_encode函数转化后,对应的json字符串["1","2","3"]
细心的朋友很快就发现,转化后得到的json字符串,就是javascript中的数组形式,那么是否可以用js的数组访问方式来访问呢?
当然是可以的,但是你将这个json字符串传递给给js时,需要使用urlencode函数对其编码,如:
'"id="aj">访json
我们可以用下面的js代码来验证:
functionshow(str{varjobj=eval(decodeURI(str;alert(jobj[2];}
大家自己试一试就会发现,是的,可以用js中访问一维数组的方式来访问它。eval方法将json字符串解释为json对象,因为传递过来的是字符串,不转化的话,你得到将是字符串中第三个字符的值。
我们再来对这个一维数组做一下变化,我们发现上面的一维数组没有指定索引,所以它默认为数字索引,现在我们来给它加上键名:
考虑php数组$array=array('a'=>'1','b'=>'2','c'=>'3';使用json_encode函数转化后,对应的json字符串为{"a":"1","b":"2","c":"3"}
我们很快就发现了其中的不同,最明显的就是字符串两端的[]变成了{},那么这个字符串是1
百度文库-让每个人平等地提升自我!

否也可以按上面那样处理后被js访问呢?我们不防试一试:
urlencode(json_encode(array('a'=>'1','b'=>'2','c'=>'3';?>'"id="aj">访问json
functionshow(str{varjobj=eval(decodeURI(str;alert(jobj.a;}
大家如果动手试了就知道,点击链接后,没有出现弹窗。为什么呢?是PHP生成的json字符串格式不对吗?不是的,这是我们在使用eval函数解释的时候,出错了。把上面的函数代码换成:
functionshow(str{varjobj=eval('('+decodeURI(str+'';alert(jobj.a;}
再试试吧!怎么样,可以访问了吧。这告诉我们,在使用eval方法处理带有键名的json字符串时,需要在字符串两端加上括号。至于为什么,站长也不知道,站在巨人的肩膀上而已。
这里要注意,尽管PHP生成的json字符串{"a":"1","b":"2","c":"3"}被传递给js后无法被直接解释json格式,但是如果你在js中使用该字符串直接创建json数据,是可以的。试试下面的代码吧:varjobj={"a":"1","b":"2","c":"3"};alert(jobj.b;
2、二维数组
二维数组在PHP用的应用非常广泛,因此了解二维数组转化后的json格式非常重要。有了上面的例子做铺垫,下面站长就直接给出示例代码:
'"id="aj">访问json
functionshow(str{varjobj=eval(decodeURI(str;alert(jobj[0][0];}
大家运行,会发现,这跟一维数组差不多,这是不带键名的例子,因此在show函数中,去掉字符串两端的括号也是可以的。
2

本文来源:https://www.2haoxitong.net/k/doc/fbcf778aecfdc8d376eeaeaad1f34693dbef10f8.html

《正在进行安全检测....doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式