thinkphp下的三级联动(带有缓存的)

1.Application\Home\View\Index\index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	省份:
	<select name="prov" id="prov">
		<option value="0">请选择省份</option>
		<volist name="prov_data" id="vo">
			<option value="{$vo.id}">{$vo.name}</option>
		</volist>
	</select>
	城市:
	<select name="city" id="city">
		<option value="0">请选择城市</option>
	</select>
	地区:
	<select name="county" id="county">
		<option value="0">请选择地区</option>
	</select>

	
	<script type="text/javascript" src="__PUBLIC__/Style/Js/jquery-1.8.3.min.js"></script>
	<script type="text/javascript">
		$(function(){
			$('#prov').change(function(){
				var pid = $(this).val();
				$.post("{:U('Index/getCity')}",{'pid':pid},function(data){
					if(data.status){ 
						var html='<option value="0">请选择城市</option>';
						$.each(data.data,function(i,item){
							html+="<option value="+item.id+">"+item.name+"</option>";
						});
						$('#city').html(html);
					}else{
						alert(data.msg);
					}
				},'json');
				$('#county').html('<option>请选择地区</option>');
			});
			$('#city').change(function(){
				var pid = $(this).val();
				$.post("{:U('Index/getCounty')}",{'pid':pid},function(data){
					if(data.status){ 
						var html='<option value="0">请选择地区</option>';
						$.each(data.data,function(i,item){
							html+="<option>"+item.name+"</option>";
						});
						$('#county').html(html);
					}else{
						alert(data.msg);
					}
				},'json');
				$('#county').html('<option>请选择地区</option>');
			});
		});
	</script>
</body>
</html>

2.\Application\Home\Controller\IndexController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
    	$value=S('prov_data');
    	if(!empty($value)){
    		$prov_data = S('prov_data');
    	}else{
    		$prov_data=M("region")->where('pid=1')->select();
    		S('prov_data',$prov_data);
    	}
    	//$prov_data=M("region")->where('pid=1')->select();
    	$this->assign('prov_data',$prov_data);
        $this->display();
    }

    public function getCity(){
    	if(IS_POST){
    		$pid = intval($_POST['pid']);
    		if(empty($pid))
			{
				echo json_encode(array('status'=>0, 'msg'=>'对不起网络繁忙,请稍后重试...'));
				exit;
			}
			$city_data = S('city_data'.$pid);
			// 如果缓存为空,就去数据库读取并保存缓存
			if(empty($city_data))
			{
				// 从数据库获取对应的PID数据
				$city_data = M('region')->where('pid='.$pid)->select();
				// 缓存城市数据(因为有多个城市,所以标识必须“动态”)
				S('city_data'.$pid, $city_data);
			}
			
			// 判断是数据是否为空
			if(empty($city_data))
			{
				echo json_encode(array('status'=>0, 'msg'=>'对不起网络繁忙,请稍后重试...'));
				exit;
			}
			
			echo json_encode(array('status'=>1, 'data'=>$city_data));			
    	}
    }

	public function getCounty(){
    	if(IS_POST){
    		$pid = intval($_POST['pid']);
    		if(empty($pid))
			{
				echo json_encode(array('status'=>0, 'msg'=>'对不起网络繁忙,请稍后重试...'));
				exit;
			}
			$county_data = S('county_data'.$pid);
			// 如果缓存为空,就去数据库读取并保存缓存
			if(empty($county_data))
			{
				// 从数据库获取对应的PID数据
				$county_data = M('region')->where('pid='.$pid)->select();
				// 缓存地区数据(因为有多个地区,所以标识必须“动态”)
				S('county_data'.$pid, $county_data);
			}
			
			// 判断是数据是否为空
			if(empty($county_data))
			{
				echo json_encode(array('status'=>0, 'msg'=>'对不起网络繁忙,请稍后重试...'));
				exit;
			}
			
			echo json_encode(array('status'=>1, 'data'=>$county_data));			
    	}
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章