background image

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

 

href="javascript:show('<?php

 

echo 

urlencode(json_encode(array(array('1','2','3'))));?>')" id="aj">访问 json</a>
function show(str){
var jobj=eval(decodeURI(str));
alert(jobj[0][0]);
}
大家运行,会发现,这跟一维数组差不多,这是不带键名的例子,因此在 show 函数中,
去掉字符串两端的括号也是可以的。
下面,我们对二维数组进行一下变化,在第二维中加入键名,请看示例代码:
<a

 

href="javascript:show('<?php

 

echo 

urlencode(json_encode(array(array("a"=>'1',"b"=>'2','3'))));?>')"   id="aj"> 访
问 json</a>
function show(str){
var jobj=eval('('+decodeURI(str)+')');
alert(jobj[0].a);
}
大家运行代码后,发现,这里我们访问 json 数据的方式有点不一样。上面我们用的是
alert(jobj[0][0]);
而这里我们用的是
alert(jobj[0].a);不要问我为什么,就是这样。这就是 json 的访问方式。
上面的例子,我们对二维数组的第二维添加了键名,下面我们对第一维添加键名,看看
访问方式又有什么不同: