①先备好<select>选择器,写好里面的option
//由于各个省份,我都是写在数据库里,再输出在select的option里的,所以下面用php循环输出
<select name="province1" id="province">
<?php
$rs=$DB->query("SELECT * FROM province");
while($res = $DB->fetch($rs))
{
echo '<option value="'.$res['province'].'">'.$res['province'].'</option>';
}
?>
</select>
②只要select选择器onchange,就触发函数,使用ajax进行传数据
传到province.php页面进行处理,记住,要把当前select的value值一起传过去。所以url要写成"province.php?pid="+this.value
<script type="text/javascript" charset="utf-8">
var content=document.getElementById('content');
var whichprovince = document.getElementById('province');
whichprovince.onchange=function(){
var xhr=null;
xhr=new XMLHttpRequest();
xhr.open("get","province.php?pid="+this.value,true);
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
var arr= JSON.parse(xhr.responseText);
// alert(arr);
var str='';
for (var i = 0; i < arr.length; i++) {
str += '<a href="landscape_detail.php?id='+arr[i].landid+'"><div class="jingdian"><img src="'+arr[i].landimg+'" alt=""><span>'+arr[i].landname+'</span></div></a>';
}
// alert(str);
content.innerHTML=str;
}
}
}
</script>
③我的province.php里面写的是,如下:
- 连接收据库
- $province = $_GET['pid']; //接受到传过来的select的value值
- 准备好sql语句 $sql="SELECT * FROM landscape WHERE province='{$province}'";
- 创建一个空数组,把查询数据库之后显示的每一行都插入这个数组里面 while($row = mysqli_fetch_assoc($res)){ array_push($arr,$row); }
- 将这个数组转成字符串 echo json_encode($arr);
<?php
include 'config.php';
if(!$link){
echo "连接失败";
exit;
}
$province = $_GET['pid'];
// 设置字符集
mysqli_set_charset($link,"utf8");
// 选择数据库
mysqli_select_db($link,"travel");
// // 准备sql语句
if($province == '全国'){
$sql="SELECT * FROM landscape";
}else {
$sql="SELECT * FROM landscape WHERE province='{$province}'";
}
// var_dump($sql);
// // 发生sql语句
$res = mysqli_query($link,$sql);
// var_dump($res);
$arr = array(); //创建一个空数组
while($row = mysqli_fetch_assoc($res)){
array_push($arr,$row); //将从数据库里取出的每一行数据,插入到数组里面
}
echo json_encode($arr);
mysqli_close($link);
?>
④接收province.php 返回的responseText,所以看回你刚刚ajax的那个文件
- 如果sql语句query成功----> if(xhr.readyState == 4)
- 把responseText这个字符串,恢复回数组形式 var arr= JSON.parse(xhr.responseText);
- 通过for循环,输出你要的html语句
- 把这个html语句,插入到你放内容的那个dom元素里,如: content.innerHTML=str;
<script type="text/javascript" charset="utf-8">
var content=document.getElementById('content');
var whichprovince = document.getElementById('province');
whichprovince.onchange=function(){
var xhr=null;
xhr=new XMLHttpRequest();
xhr.open("get","province.php?pid="+this.value,true);
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
var arr= JSON.parse(xhr.responseText);
// alert(arr);
var str='';
for (var i = 0; i < arr.length; i++) {
str += '<a href="landscape_detail.php?id='+arr[i].landid+'"><div class="jingdian"><img src="'+arr[i].landimg+'" alt=""><span>'+arr[i].landname+'</span></div></a>';
}
// alert(str);
content.innerHTML=str;
}
}
}
</script>