javascript和php使用ajax通信传递JSON的实例
JS和PHP直接通信常用ajax完成,以实现js上UI的动态变化。通信使用JSON或者XML传递数据。下面详细描述两者直接JSON字符串的传递。
下面案例是要传递这样的json数据:
{
"bookid":"558a6be36c72a",
"resitems":[
{
"res_id":"558a6bff6bd55",
"res_name":"IMG_8421.jpg",
"src_origin":"558a6bff6bd55.jpg",
"src_hd":"558a6bff6bd55_hd_1920_1280.jpg",
"src_sd":"558a6bff6bd55_sd_1024_682.jpg",
"src_td":"558a6bff6bd55_td_300_200.jpg"
},
{
"res_id":"558a6c4a716a2",
"res_name":"IMG_8477.jpg",
"src_origin":"558a6c4a716a2.jpg",
"src_hd":"558a6c4a716a2_hd_1920_1280.jpg",
"src_sd":"558a6c4a716a2_sd_1024_682.jpg",
"src_td":"558a6c4a716a2_td_300_200.jpg"
}
]
}
ajax:
首先要熟悉ajax的用法,它是连接浏览器和服务器的桥梁。
一般用法如下:
$.ajax({
type:"POST",
url:"SQLHelper.php",
dataType:'json',
async:false,
data:{'json':jsonStr}
});
其中type的类型可以是GET和POST,url是服务器处理的脚本程序。dataType类型有text,json,xml等等,async通常使用false,data是具体要传递的json字符串,并且给服务器post一个叫做json字段的数据,PHP端可以$_POST['json']就可以获取post过来的数据。如果需要接收返回数据,
varreq=$.ajax({
type:"POST",
url:"SQLHelper.php",
dataType:'json',
async:false,
data:{'json':jsonStr}
});
varresponse=req.responseText;
上面使用ajax实现了一次普通的客户端到服务器的一次数据传递。下面的问题是怎么去获得上面的jsonStr呢?像开篇提及的那种json字符串怎么才能生成的问题附:如果遇到含有中文的url如下操作:
location=encodeURI('content_p.html?id='+catalogid+'&title='+bookTitle+'&thumb='+bookThumb);
JavaScript->PHP:
使用js数组来完成json对象的封装:
vararrX={resitems:[]};
arrX.bookid=bookid;
for(vari=0;i
上面的代码是先创建arrX的json对象,对对象添加各种属性、变量等。最后通过stringify转化为字符串,这个获得的字符串jsonResStr就是一个普通字符串了,可以通过ajax传递到服务器了,值得注意的是,这里如果有中文,那是没问题的,不会出现乱码问题。在完成了JOSN封装之后,开始使用ajax传递到PHP页面
$.ajax({
type:"POST",
url:"SQLHelper.php",
dataType:"json",
async:false,
data:{'jsonResPanel':jsonResStr},
success:function(json){}
});
php对接收到的json数据解析并且写入到数据库:
if(isset($_POST['jsonResPanel'])){
$data=$_POST['jsonResPanel'];
$arr=(array)(json_decode($data));
$items=(array)($arr['resitems']);
$bookid=$arr['bookid'];
$sql="";
for($i=0;$iexecute_dml($sqlDelete);
$sqli->multi_execute_dml($sql);
$sqli->close_connect();
}
需要注意的是第三号在拿到json字符串之后便使用json_decode函数解析成对象,这个时候只是一个普通php对象,无法给我提供有效信息,需要将它强制转换为数组array即可变为我们熟悉的php数组,在拿到信息的数组之后,我们便可以像操作普通php数组那样提取json传递过来的所有信息了,上面代码将json的部分信息添加到数据库的一张表里边,当然如果传递的json字符串过长,建议使用GZip在客户端对字符串压缩之后再传递,接收端解压缩即可。
PHP->JavaScript:
如果客户端需要查询数据库的数据,必然需要要求服务器查询,由php将查询结果通过json返回给客户端。
首先客户端通过ajax发送查询请求给php
varrequest=$.ajax({url:'SQLHelper.php?loadResPanel='+bookid,async:false});
varjsonStr=request.responseText;
第二行表示得到了查询结果,下面来看看在php端是怎么生成这个结果并返回的。
if(isset($_REQUEST['loadResPanel'])){
$bookid=$_REQUEST['loadResPanel'];
$sqli=newSQLHelper('ugumanage');
$arr=array();
$arrItems=array();
$arrInfo=array();
$head=urlencode("http://{$_SERVER['HTTP_HOST']}/cloud/");
$sql0="select*fromcontentsheetwherebookid='{$bookid}'";
$res0=$sqli->execute_dql($sql0);
while($row0=$res0->fetch_assoc()){
$catalogid=$row0['catalogid'];
$bookid=$row0['bookid'];
$title=urlencode($row0['title']);
}
$sql1="select*fromresourcesheetwherebookid='{$bookid}'";
$res1=$sqli->execute_dql($sql1);
while($row1=$res1->fetch_assoc()){
$item=array('bookid'=>$row1["bookid"],'res_id'=>$row1['res_id'],'res_name'=>urlencode($row1["res_name"]),
'src_origin'=>$row1["src_origin"],'src_hd'=>$row1["src_hd"],'src_sd'=>$row1["src_sd"],'src_td'=>$row1["src_td"]);
array_push($arrItems,$item);
}
$arrInfo['head']=$head;
$arrInfo['catalogid']=$catalogid;
$arrInfo['bookid']=$bookid;
$arrInfo['title']=$title;
$arr['info']=$arrInfo;
$arr['items']=$arrItems;
$json=urldecode(json_encode($arr));
echo$json;
$sqli->close_connect();
}
值得注意的是第七行这种,遇到特殊符号或者中文字符,在php端需要将它们统一转码,具体转成了什么,我们不用关心,只需要知道在外面套一个urlencode函数就可以了。创建json同样是使用数组,编制好数组之后,通过json_encode可以直接将其转化为json字符串。这里在返回给客户端之前,仍然需要再使用urldecode解码,这样传递出来的json字符串才不会有乱码现象。
客户端接收到json字符串后同样需要对它进行解析成javascript对象。
varrequest=$.ajax({url:'SQLHelper.php?loadResPanel='+bookid,async:false});
varjsonStr=request.responseText;
varjsonObj=JSON.parse(jsonStr);
varinfo=jsonObj.info;
varitems=jsonObj.items;
document.getElementById('textBox').value=info.title;
for(vari=0;i
注意的是第四行。解析json的关键方法是JSON.parse方法,json字符串变成javascript对象之后,便可以任意提取json传递过来的讯息了。
以上这篇javascript和php使用ajax通信传递JSON的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。