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过来的数据。如果需要接收返回数据,

var req= $.ajax({ type:"POST", url:"SQLHelper.php", dataType:'json', async:false, data:{'json':jsonStr} }); var response=req.responseText;

上面使用ajax实现了一次普通的客户端到服务器的一次数据传递。下面的问题是怎么去获得上面的jsonStr呢?像开篇提及的那种json字符串怎么才能生成的问题 附:如果遇到含有中文的url 如下操作:

location=encodeURI('content_p.html?id='+catalogid+'&title='+bookTitle+'&thumb='+bookThumb);

JavaScript->PHP:

使用js数组来完成json对象的封装:

var arrX={resitems:[]}; arrX.bookid=bookid; for (var i=0; i < cellList.length; i++) { var item=cellList[i]; var jsonRes={}; jsonRes.bookid=bookid; jsonRes.res_id=item.itemStruct.id; jsonRes.res_name=item.itemStruct.name; jsonRes.src_origin=item.itemStruct.src; jsonRes.src_hd=item.itemStruct.src_hd; jsonRes.src_sd=item.itemStruct.src_sd; jsonRes.src_td=item.itemStruct.src_td; arrX.resitems.push(jsonRes); }; var jsonResStr=JSON.stringify(arrX);

上面的代码是先创建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; $i < count($items); $i++) { $value=(array)($items[$i]); $bookid=$value['bookid']; $res_id=$value['res_id']; $res_name=$value['res_name']; $src_origin=$value['src_origin']; $src_hd=$value['src_hd']; $src_sd=$value['src_sd']; $src_td=$value['src_td']; $sql.="insert into resourcesheet(bookid,res_id,res_name,src_origin,src_hd,src_sd,src_td)values ('{$bookid}','{$res_id}','{$res_name}','{$src_origin}','{$src_hd}','{$src_sd}','{$src_td}');"; } $sqli=new SQLHelper('ugumanage'); //先删除bookid下所有资源 $sqlDelete="delete from resourcesheet where bookid='{$bookid}'"; $sqli->execute_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

var request=$.ajax({url:'SQLHelper.php?loadResPanel='+bookid,async:false});

var jsonStr=request.responseText;

第二行表示得到了查询结果,下面来看看在php端是怎么生成这个结果并返回的。

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

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