关于JSON以及JSON在PHP中的应用技巧(3)


<?php
$arr = array(
'name' => '脚本之家',
'nick' => '深空',
'contact' => array(
'email' => 'shenkong at qq dot com',
'website' => 'https://www.jb51.net',
)
);
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?>


访问对象内的属性会吧?$obj->name,这样子的,当然,也可以把它转位数组,方便调用啦:

复制代码 代码如下:


$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (array) $obj;
print_r($arr);


PHP转来转去的用途不是特别大,除了缓存生成,感觉还不如直接存数组呢,不过,当你和前台交互的时候,它的作用就出来咯,下面看看我怎么用Javascript来使用这段字符:

复制代码 代码如下:


<script type="text/javascript">
var arr = {"name":"/u9648/u6bc5/u946b","nick":"/u6df1/u7a7a","contact":{"email":"shenkong at qq dot com","website":"http:////www.jb51.net"}};
alert(arr.name)
</script>


上面中,直接将这个字符串赋给一个变量,它就变成一个Javascript数组了(专业化术语应该不叫数组,不过由于PHP的习惯问题,我就 一直叫数组好了,方便理解)。这样,可以很方便的对arr进行遍历或者任意做你想做的事情了。写到这里,好像都没提到AJAX哦?是哦,联想一下,如果服 务端返回的responseText用JSON过的字符串代替XML的话,前台Javascript处理起来是不是很方便呢?狗皮膏药就是这样用的。
其实写到这里,除了数据的存储格式不太一样外,JSON和XML也没什么太大区别哦,不过下面我说的一点。虽然和XML没多大关系,不过, 可以说明JSON更大范围的应用,那就是,跨域的数据调用。由于安全性问题,AJAX不支持跨域调用,这样要调用不同域名下的数据,很麻烦哦,虽然有解决 方案(stone在他的讲座上提到过了代理啊什么的虽然听不懂但是知道能解决)。我写两个文件,足以展示跨域调用了。
主调文件index.html

复制代码 代码如下:


<script type="text/javascript">
function getProfile(str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</script>
<body><div></div></body>
<script type="text/javascript" src="https://www.openphp.cn/demo/profile.php"></script>


被调文件profile.php

复制代码 代码如下:


<?php
$arr = array(
'name' => '脚本之家',
'nick' => '深空',
'contact' => array(
'email' => 'shenkong at qq dot com',
'website' => 'https://www.jb51.net',
)
);
$json_string = json_encode($arr);
echo "getProfile($json_string)";
?>


很显然,当index.html调用profile.php时,JSON字符串生成,并作为参数传入getProfile,然后将昵称插入到div中,这样一次跨域数据交互就完成了,是不是特别简单。既然JSON这么简单易用而且好用,还等什么呢?^_^

服务器端的 JSON

将 JSON 发给服务器

将 JSON 发给服务器并不难,但却至关重要,而且还有一些重要的选择要做。但是,一旦决定使用 JSON,所要做的这些选择就会十分简单而且数量有限,所以您需要考虑和关注的事情不多。重要的是能够将 JSON 字符串发送给服务器,而且最好能做到尽快和尽可能简单。

通过 GET 以名称/值对发送 JSON

将 JSON 数据发给服务器的最简单方法是将其转换成文本,然后以名称/值对的值的方式进行发送。请务必注意,JSON 格式的数据是相当长的一个对象,看起来可能会如清单 1 所示:

清单 1. JSON 格式的简单 JavaScript 对象

复制代码 代码如下:


var people = { "programmers": [  { "firstName": "Brett", "lastName":"McLaughlin",
"email": "brett@newInstance.com" },  { "firstName": "Jason", "lastName":"Hunter",
"email": "jason@servlets.com" },  { "firstName": "Elliotte", "lastName":"Harold",
"email": "elharo@macfaq.com" }  ], "authors": [  { "firstName": "Isaac",
"lastName": "Asimov", "genre": "science fiction" },  { "firstName": "Tad",
"lastName": "Williams", "genre": "fantasy" },  { "firstName": "Frank",
"lastName": "Peretti", "genre": "christian fiction" }  ], "musicians": [ 
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, 
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }  ] }


如果要以名称/值对将其发送到服务器端,应该如下所示:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/240caa868eeb306f92ddc447171e2a84.html