昨天下午一个织梦的群里居然有人问我json的问题,说实话,我真没学过,只是听过而已。然后那个人咬定我是高手,非得问我,没办法,我只好抽空研究。Json是一种轻量级的数据交换格式,可以方便快捷的应用在web当中,比xml更加灵活方便,不那么繁琐。我只好百度一些实例,然后开始研究。幸好网上有现成的例子供我研究,我一看还挺全的,显示页面和处理页面都有,我还想不错。结果一看呢,还不是我要的效果,因为我要获取的是服务器上的json数据,他那个是通过php模拟的,行不通。后来我一想,不是可以fopen也能打开远程资源么,查手册果然可以,然后打开可以获取到内容。但是问题出现了,一般的json数据都是类似这种的,比如下面的代码:
{"a":{"player_id":2,"username":"1081421","nickname":"\u6c34\u6d01\u4e66","level":24,"experience":9320},"b":{"player_id":20,"username":"1115265","nickname":"\u4e00\u7c73\u9633\u5149\u3001","level":19,"experience":27009}}';
这个json字符串包含a和b两组数据,这样是好取的,用json.a.username这样就可以访问到里面的元素,可是当这个a换成数字就不行啦,不能用那种方法。我想破脑袋没想到,然后我就去群里问人,果然有了结果,原来可以用索引,也就是这样json[2].username,就可以访问啦。
前台用的是ajax,用来获取服务器端的数据并打印出来,基本上和写其他的差不多,就是换成了请求json的几个函数,后台就是获取数据,我用的fopen,刚开始这个不知道怎么也不行,后来自然好啦,我也试过了别人给我的curl方法,同样可成功。好啦,废话不说啦,上代码咯。亲们。慢慢看啊。
---------------------------show.html------------------------------------------------
<html>
<head>
<title>发送JSON请求</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
//在IE下创建XMLHttpRequest对象
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc)
{
xmlHttp = null;
}
}
//在Mozilla和Safari等非IE浏览器下创建XMLHTTPRequest对象
if(!xmlHttp && typeof XMLHttpRequest != "undefined")
{
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
//发送JSON格式请求
function sendRequestJosn()
{
var url="f.php";
createXMLHttpRequest();
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=getJSON;
xmlHttp.send(null);
}
//getJSON函数解析JSON字符串
function getJSON()
{
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var arr = xmlHttp.responseText;
var json = eval("(" + arr + ")");
var result="";
result+="id:"+json[2].player_id+"<br/>";
result+="用户名:"+json[2].username;
document.getElementById('message').innerHTML = result;
}
}
}
</script>
</head>
<div id="message"></div>
<body onLoad="sendRequestJosn()">
<h3>用户信息如下所示:</h3>
</body>
</html>
========================f.php=========================
<?php
方法一:
header('Content-type:text/html;charset=utf-8');
$file=fopen("http://api.sxd.xd.com/order/s999.sxd.xd.com_plt.json","r") or exit("Unable to open file!");
while(!feof($file))
{
$message=fgets($file);
}
echo $message;
?>
方法二:
<?php
header("Content-Type:textml;charset=gb2312");
$orderid=rand(10000000,99999999);
$sign=md5("ccrd_10_".$orderid."_s999.sxd.xd.com_{the-test-api-key-for-s999}");
$curlPost = 'user=ccrdsdasd&gold=10&order='.urlencode($orderid).'&domain=s999.sxd.xd.com&sign='.urlencode($sign);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.sxd.xd.com/order/s999.sxd.xd.com_plt.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
echo $data;
curl_close($ch);
?>
至于这个curl方法我还没研究,所以呢细节我也不懂,亲们自己百度吧~~~~
{"a":{"player_id":2,"username":"1081421","nickname":"\u6c34\u6d01\u4e66","level":24,"experience":9320},"b":{"player_id":20,"username":"1115265","nickname":"\u4e00\u7c73\u9633\u5149\u3001","level":19,"experience":27009}}';
这个json字符串包含a和b两组数据,这样是好取的,用json.a.username这样就可以访问到里面的元素,可是当这个a换成数字就不行啦,不能用那种方法。我想破脑袋没想到,然后我就去群里问人,果然有了结果,原来可以用索引,也就是这样json[2].username,就可以访问啦。
前台用的是ajax,用来获取服务器端的数据并打印出来,基本上和写其他的差不多,就是换成了请求json的几个函数,后台就是获取数据,我用的fopen,刚开始这个不知道怎么也不行,后来自然好啦,我也试过了别人给我的curl方法,同样可成功。好啦,废话不说啦,上代码咯。亲们。慢慢看啊。
---------------------------show.html------------------------------------------------
<html>
<head>
<title>发送JSON请求</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
//在IE下创建XMLHttpRequest对象
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc)
{
xmlHttp = null;
}
}
//在Mozilla和Safari等非IE浏览器下创建XMLHTTPRequest对象
if(!xmlHttp && typeof XMLHttpRequest != "undefined")
{
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
//发送JSON格式请求
function sendRequestJosn()
{
var url="f.php";
createXMLHttpRequest();
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=getJSON;
xmlHttp.send(null);
}
//getJSON函数解析JSON字符串
function getJSON()
{
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var arr = xmlHttp.responseText;
var json = eval("(" + arr + ")");
var result="";
result+="id:"+json[2].player_id+"<br/>";
result+="用户名:"+json[2].username;
document.getElementById('message').innerHTML = result;
}
}
}
</script>
</head>
<div id="message"></div>
<body onLoad="sendRequestJosn()">
<h3>用户信息如下所示:</h3>
</body>
</html>
========================f.php=========================
<?php
方法一:
header('Content-type:text/html;charset=utf-8');
$file=fopen("http://api.sxd.xd.com/order/s999.sxd.xd.com_plt.json","r") or exit("Unable to open file!");
while(!feof($file))
{
$message=fgets($file);
}
echo $message;
?>
方法二:
<?php
header("Content-Type:textml;charset=gb2312");
$orderid=rand(10000000,99999999);
$sign=md5("ccrd_10_".$orderid."_s999.sxd.xd.com_{the-test-api-key-for-s999}");
$curlPost = 'user=ccrdsdasd&gold=10&order='.urlencode($orderid).'&domain=s999.sxd.xd.com&sign='.urlencode($sign);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.sxd.xd.com/order/s999.sxd.xd.com_plt.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
echo $data;
curl_close($ch);
?>
至于这个curl方法我还没研究,所以呢细节我也不懂,亲们自己百度吧~~~~



评论or提问点击发表评论或提问!