PHP通过ajax实现得到省市县区域三级联动的选项组

  •   
  • 5545
  • PHP
  • 0
  • super_dodo
  • 2015/11/03

在一些项目的开发中需要对注册的商家或者用户实现省市县的三级或者更多层级的联动效果。同样也适用于多级分类的效果。下面直接上代码,请各位自行琢磨。。欢迎指正分享建议。。

HTML部分的代码如下:

<select name="Form&#91;province_id&#93;" id="province" class="form-control xx6">
	<option value="">请选择</option>
	<?php echo WebsiteProvince::model()->getOpt();?>
</select>
<select name="Form&#91;city_id&#93;" id="city" class="form-control xx6">
	<option value="">必选</option>
</select>
<select name="Form&#91;district_id&#93;" id="district" class="form-control xx6">
	<option value="">必选</option>
</select>
<select name="Form&#91;area_id&#93;" id="area" class="form-control xx6">
	<option value="">必选</option>
</select>

JS部分的代码如下:

//当选择城市变化的时候,对应变化下面的片区
$('#province').change(function(){
	var prov_id = $('#province').val();
	$('#city').html('');
	$('#district').html('');
	$('#area').html('');
	$.getJSON("/api/common/getOptByPid", {prov_id:prov_id}, function(data){
		$('#city').html('<option value="">请选择</option>'+data);
	});
});

//当选择城市变化的时候,对应变化下面的片区
$('#city').change(function(){
	var city_id = $('#city').val();
	$('#district').html('');
	$('#area').html('');
	$.getJSON("/api/common/getOptByCid", {city_id:city_id}, function(data){
		$('#district').html('<option value="">请选择</option>'+data);
	});
});

//当选择城市变化的时候,对应变化下面的片区
$('#district').change(function(){
	var district_id = $('#district').val();
	$('#area').html('');
	$.getJSON("/api/common/getOptByDid", {district_id:district_id}, function(data){
		$('#area').html('<option value="">请选择</option>'+data);
	});
});

PHP接口部分的代码如下:

// 传入城市的ID,获取下面相应的片区Opt信息
public function actionGetOptByPid() {
	$request = Yii::app()->request;
	$pid = $request->getParam('prov_id');

	$opt = '';
	$criteria = new CDbCriteria();
	$criteria->select = array('id','name','sort');
	$criteria->addCondition("parent_id = '{$pid}'");
	$criteria->addCondition("status = '1'");
	$criteria->order = 'sort DESC';
	$data = WebsiteCity::model()->findAll($criteria);	//在该方法先查询所有记录
	if($data){
		foreach ($data as $key => $value) {
			$opt .= '<option value="'.$value->id.'">'.$value->name.'</option>';
		}
	}
	echo json_encode($opt);
}


// 传入城市的ID,获取下面相应的片区Opt信息
public function actionGetOptByCid() {
	$request = Yii::app()->request;
	$cid = $request->getParam('city_id');
	$opt = '';
	$data = WebsiteDistrict::model()->findAll("parent_id = '{$cid}'");
	if($data){
		foreach ($data as $key => $value) {
			$opt .= '<option value="'.$value->region_id.'">'.$value->region_name.'</option>';
		}
	}
	echo json_encode($opt);
}


//...............

不要抱怨你没有一个好爸爸,不要抱怨你的工作差,不要抱怨怀才不遇无人赏识。现实有太多的不如意,就算生活给你的是垃圾,你同样能把垃圾踩在脚底下登上世界之巅。这个世界只在乎你是否在到达了一定的高度,而不在乎你是踩在巨人的肩膀上上去的,还是踩在垃圾上上去的。