• php抓取远程数据显示在下拉列表中


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

      

      

      

  • 相关阅读:
    Xfire的aegis绑定方式配置小结
    ExtJS入门
    InstallScript 中数组的使用
    [转]手把手教你用C#(.NET)打包应用程序(安装程序)【卸载模块已添加】
    [VB]全局钩子
    VB.NET 反射机制取得当前函数名 类名等
    [.Net][转]dotNet取得各种系统信息
    [VB]清空Clipboard
    [VB]取得本机的网络连接(类似netstat 命令)
    [InstallShield] 安装时添加一个进度对话框Dialog
  • 原文地址:https://www.cnblogs.com/wgphp/p/7709379.html
Copyright © 2020-2023  润新知