前言:周五10月20日的时候,经理让做一个插件,使用的thinkphp做这个demo
使用CURL抓取远程数据时如果出现乱码问题可以加入
header("content-type:text/html;charset=utf-8");
或者使用mb_convert_encoding函数进行字符编码的转换
在这个demo中要抓取的最终信息是要经过不断的层级调用,也即是
1.根据appkey获得所有品牌,得到品牌id
2.根据品牌id得到所有车型,得到车型id
3.根据车型id得到所有款式,得到款式Id
4.根据款式Id得到详细信息
使用了json解码函数解析服务器返回的Json数据,需要注意的是不要加
//curl_setopt($ch, CURLOPT_HEADER, 1);//不要加,不然无法正确解析json数据,因为数据多了http头文件信息
json_decode函数第二个参数为true确保返回值是数组
使用$this->assign("模版变量名",$解码后的数组)
在前端的下拉列表中即可以获取到全部的品牌数据:
请选择品牌: <select name="list1" id="list1"> <volist name="car1" id="vo"> <option value="{$vo.name}">{$vo.name}</option> </volist> </select>
使用ajax将选择的下拉列表值传递给后端,根据值用循环遍历数组的办法得到品牌id
$(document).ready(function(){ var car1=$("#list1 option:selected").val(); $.ajax({ type:"post", url:"{:U('Home/Car/car1')}", data:"car1="+car1, success:function(html){ if(html){ // alert(html); $("#list2").html(html); } } }); });
得到id输出车型数据,后端代码:
//得到品牌的名称 $car1=I('post.car1'); ...............................//部分curl省略 $json1=json_decode($output,true); $result = $json1['result']; foreach($result as $a){ foreach($a as $b){ if($b==$car1){ //此处的$id1是要传递给url的 $id1=$a['id']; } } } ..............................//再次进行curl操作,根据id得到所有的车型信息 $json2=json_decode($rs2,true); $result2 = $json2['result']; dump($result2); //将型号的数组数据保存至session中,在型号的下拉列表中根据型号值遍历数组得到型号id session("result2",$result2); foreach($result2 as $val){ echo $str1='<optgroup label="'.$val['name'].'">'."<---".$val['name']."--->".'</optgroup>'; foreach($val['list'] as $v) { $str1='<option value="'.$v['name'].'">'.$v['name'].'</option>'; echo $str1; } }
以上的方法是正确无误的,为什么不用session直接保存id,因为前端ajax是动态选择型号名字,直接做在一个控制器的方法中得到的不是用户选择的型号
根据型号选择款式的ajax代码跟上述类似,之后仍然是遍历,遍历session保存的数组得到型号id,之后根据id得到款式的数组数据,输出html
以上方法类推,便完成了整个demo
关于CURL的使用规则在此:http://www.cnblogs.com/wgphp/p/7707917.html