JSON和XML没什么太大区别,不过JSON有一个更大范围的应用,那就是,跨域的数据调用。由于安全性问题,AJAX不支持跨域调用,这样要调用不同域名下的数据,很麻烦。下面这个例子,足以展示php用json如何进跨域调用了。
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="http://www.openphp.cn/demo/profile.php"></script>
<?php $arr = array( 'name' => 'tanteng', 'nick' => 'pony', 'contact' => array( 'email' => 'a@gmail.com', 'website' => 'http://aa.sinaapp.com', ) ); $json_string = json_encode($arr); echo "getProfile($json_string)"; ?>
当index.html调用profile.php时,JSON字符串生成,并作为参数传入getProfile,然后将昵称插入到div中,这样一次跨域数据交互就完成了,是不是特别简单。
PHP json格式和js json格式 js跨域调用实现代码
先看一个js函数
function jsontest() { var json = [{'username':'crystal','userage':'20'},{'username':'candy','userage':'24'}]; alert(json[1].username); var json2 = [['crystal','20'],['candy','24']]; alert(json2[0][0]); }
$arr = array ( array ( 'catid' => '4', 'catname' => '程程', 'meta_title' => '程程博客' ), array ( 'catid' => '6', 'catname' => 'climber', 'meta_title' => '攀登者', ) ); $jsonstr = json_encode($arr); echo $jsonstr;
这段代码中,$arr是一个数组,我们采用 json_encode 将$arr 转换为了 json 格式 。 $arr = array ( array ( 'catid' => '4', 'catname' => '程程', 'meta_title' => '程程博客' ), array ( 'catid' => '6', 'catname' => 'climber', 'meta_title' => '攀登者', ) ); $jsonstr = json_encode($arr);
我们再建立一个 json.html 文件
<SCRIPT type=text/javascript src="php_json.php"></SCRIPT><SCRIPT language=javascript type=text/javascript> function loadjson(_json) { if(_json) { for(var i=0;i<_json.length;i++) { alert(_json[i].catname); } } } loadjson(jsonstr) </SCRIPT>
这样,我们在查看 json.html的时候,loadjson(jsonstr) 就会 提示 “程程”和“climber” 关闭