前言:周五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

  

  

  

最新文章

  1. win10 右键菜单添加Git Hash Here
  2. NPOI 导出Excel2007版本时出现流已关闭问题
  3. js实现倒计时及时间对象
  4. JSP Servlet性能分析
  5. AngularJS 中文资料+工具+库+Demo 大搜集
  6. noi2015的回忆和教训
  7. AlloyTouch实现下拉刷新
  8. jquery ui 改写cloes事件
  9. hadoop2.2 伪分布式环境
  10. Qt属性系统
  11. jQuery手写几个常见的滑动下拉菜单 分分秒秒学习JS
  12. 1787: [Ahoi2008]Meet 紧急集合
  13. java手写线程池,完善中
  14. spring整合Jersey 无法注入service的问题
  15. ubuntu设置开机默认进入字符界面方法 ubuntu 12.04 桌面版关闭图形界面(转)
  16. Mysql 数据类型(基础5)
  17. NServiceBus消息重播
  18. alluxio网络流量异常分析【转】
  19. iOS贝塞尔曲线(UIBezierPath)的基本使用方法
  20. 用NI的数据采集卡实现简单电子测试之4——半导体温度传感器

热门文章

  1. 10_PAE_非PAE
  2. 从零开始搭建系统1.4——MySql安装及配置
  3. linux安装lolcat实现彩色文字输出信息
  4. 初识webSocket及其使用
  5. Visio2016专业版永久激活码
  6. 过滤掉map集合中key或value为空的值
  7. delphi xe10 手机内部系统相关操作(手机信息、震动、剪贴板、键盘、电话、拨号)
  8. 区间dp——cf983b
  9. 牛客多校第十场 D Han Xin and His Troops 中国剩余定理
  10. 基于Netty的RPC架构学习笔记(八):protocol buff学习使用