background image

php 和 js 通过 json 互相传递数据的方法

当我们在结合 php 和 javascript 实现某些功能时,经常会用到 json。json 是 js 的一种数
据 格 式 , 可 以 直 接 被 js 解析。而 php 无法直接读取 json 数据,但是 php 提供了
json_decode 函数来对 json 数据进行转化,从而可以被 php 脚本访问。同时,php 也提
供了 json_encode 函数来将数据转化成 json 格式。那么,js 中的原生 json 与 php 中通
过 json_encode 函数转化后的 json 是否完全一样呢?今天,站长就和大家一起来探讨
这个问题。
我们通过 php 向 javascript 传递数组数据时,通常要将其转化为 json 格式,以便
javascript 来获取,那么我们就以数组为例,先来看一下两者之间的区别。
1、一维数组
考虑 php 数组
$array=array("1","2","3");
使用 json_encode 函数转化后,对应的 json 字符串为
["1","2","3"]。
细心的朋友很快就发现,转化后得到的 json 字符串,就是 javascript 中的数组形式,那
么是否可以用 js 的数组访问方式来访问呢?
当然是可以的,但是你将这个 json 字符串传递给给 js 时,需要使用 urlencode 函数对
其编码,如:
<a

 

href="javascript:show('<?php

 

echo 

urlencode(json_encode(array('1','2','3')));?>')" id="aj">访问 json</a>
我们可以用下面的 js 代码来验证:
function show(str){
var jobj=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"}

我们很快就发现了其中的不同,最明显的就是字符串两端的[]变成了{},那么这个字符串
是否也可以按上面那样处理后被 js 访问呢?我们不防试一试:
<a

 

href="javascript:show('<?php

 

echo 

urlencode(json_encode(array('a'=>'1','b'=>'2','c'=>'3')));?>')"   id="aj"> 访 问
json</a>