客服端的页面代码:

<?php
$conn=mysql_connect("localhost","root",'root');
if($conn){
    $sql="use privince";
    mysql_query($sql);
    $sql="set names utf8";
    mysql_query($sql);
    $sql="select * from privince";
    $res=mysql_query($sql);
    $privice_arr=array();
    while($row=mysql_fetch_assoc($res)){
        $privince_arr[]=$row;
    }
    mysql_free_result($res);
    mysql_close($conn);

}else{
    die(mysql_error());
    exit;
}

?>
<html>
<head>
<title>
    用ajax做省市县的联动的效果
</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript">
    var xhr="";
    function getXhr(){
        if(XMLHttpRequest){
            xhr=new XMLHttpRequest();
        }else{
            xhr=new ActiveXObject("Microsoft.XMLHTTP");
        }

}
    function chuli(){
        if(xhr.readyState==4){
            if(xhr.status==200){
                var res=eval("("+xhr.responseText+")");
                if(res[0].action=='privince'){  //判断动作,看是创建省,还是市的dom节点

var city=$('city');
                    city.length=0;
                    var obj=document.createElement("option");
                        obj.innerHTML="请选择市...";
                        city.appendChild(obj);
                    for(var i=1;i<res.length;i++){
                        var city_obj=document.createElement("option");
                        city_obj.value=res[i].city_name;
                        city_obj.innerHTML=res[i].city_name;
                        city.appendChild(city_obj);
                    }

}else if(res[0].action=='city'){

var county=$('county');
                    county.length=0;
                    var obj=document.createElement("option");
                    obj.innerHTML="请选择县...";
                    county.appendChild(obj);
                    for(var i=1;i<res.length;i++){
                        var county_obj=document.createElement("option");
                        county_obj.value=res[i].county_name;
                        county_obj.innerHTML=res[i].county_name;
                        county.appendChild(county_obj);
                    }

}

}
        }
    }

function change(obj){
        getXhr();
        //obj用于判断选择的动作和取得用户的选择值,
        quyu=$(obj).value;

var uri="privinceContro.php?action="+obj+"&area="+encodeURI(quyu)+"date="+new Date();//这里为了防止在将数据传给控制器的时候出现乱码而出现取数据的错误,而用encondeURI函数转码

xhr.open("get",uri,true);
        xhr.onreadystatechange=chuli;
        xhr.send(null);

}

function $(id){
        return document.getElementById(id);
    }

</script>
</head>
<select id="privince" name="privince" οnchange="change('privince')">
    <option>请选择省份...</option>
<?php for($i=0;$i<count($privince_arr);$i++){  ?>
    <option value="<?php echo $privince_arr[$i]['privince_name']; ?>" >
        <?php echo $privince_arr[$i]['privince_name']; ?>
    </option>
<?php } ?>
</select>
&nbsp;&nbsp;

<select id="city" name="city" οnchange="change('city')">
<option>请选择市...</option>
</select>
&nbsp;&nbsp;
<select id="county" name="county">
<option>
请选择县...
</option>
</select>

</html>

控制器的代码

<?php
$action=trim($_GET['action']);
$quyu=trim($_GET['area']);

$conn=mysql_connect("localhost","root",'root');
if($conn){
    $info='';
    $sql="use privince";
    mysql_query($sql);
    $sql="set names utf8";
    mysql_query($sql);

if($action=='privince'){
        $sql="select * from cities where privince_id =(select privince_id from privince where privince_name='$quyu')";
        $res=mysql_query($sql);
        $privince_arr=array();
        while($row=mysql_fetch_assoc($res)){
            $privince_arr[]=$row;
        }
        $info.='[{"action":"privince"},';
        for($i=0;$i<count($privince_arr);$i++){
            if($i==count($privince_arr)-1){
                $info.='{"city_name":"'.$privince_arr[$i]['city_name'].'"}]';
            }else{
                $info.='{"city_name":"'.$privince_arr[$i]['city_name'].'"},';
            }
        }
        echo $info;
        exit;
    }else if($action=='city'){

$sql="select * from county where city_id =(select city_id from cities where city_name='$quyu')";
        file_put_contents("D:\myenv\apache\htdocs\ajax\log.txt",$sql,FILE_APPEND);
        $res=mysql_query($sql);
        $privince_arr=array();
        while($row=mysql_fetch_assoc($res)){
            $privince_arr[]=$row;
        }
        $info.='[{"action":"city"},';    //给客服端发送动作的类型
        for($i=0;$i<count($privince_arr);$i++){
            if($i==count($privince_arr)-1){
                $info.='{"county_name":"'.$privince_arr[$i]['county_name'].'"}]';
            }else{
                $info.='{"county_name":"'.$privince_arr[$i]['county_name'].'"},';
            }
        }
        echo $info;
        exit;
    }
}else{
    die(mysql_error());
    exit;
}

数据库:

create database pricince default charset=utf8;

use privince;

create table privince(
    privince_id int unsigned primary key auto_increment not null,
    privince_name varchar(24) not null default ''

)

create table cities(
    city_id int unsigned primary key auto_increment not null,
    city_name varchar(24) not null default '',
    privince_id int not null default ''
);

create table county(
    county_id int unsigned primary key auto_increment not null,
    county_name varchar(24) not null default ''
    city_id int not nul default ''
);

insert into privince (privince_name) values('四川省'),('福建省'),('广东省');
insert into cities (city_name,privince_id) values
('成都市',1),
('遂宁市',1),
('泸州市',1),
('福州市',2),
('泉州市',2),
('广州市',3),
('珠海市',3);

insert into county (county_name,city_id) values
('双流县',1),
('金牛区',1),
('射洪县',2),
('大英县',2),
('泸县',3),
('合江县',3),
('仓山区',4),
('永泰县',4),
('晋江',5),
('石狮',5),
('越秀区',6),
('海珠区',6),
('斗门区',7),
('香港区',7);

转载于:https://blog.51cto.com/chenyongjun/1403471

运用ajax技术写联动的效果相关推荐

  1. java笔记:自己动手写javaEE框架(七)--使用JSON和Ajax技术

    今天我要将json和ajax引入到我所写的框架,不过今天用到的技术有部分不是我框架最终使用到的技术,比如ajax技术,我用到的是最为原始的ajax技术,这次算是对老技术的回顾,不过不管技术如何演进,对 ...

  2. Demo:充分利用 Ajax 技术 来体现页面局部刷新 效果(获取天气预报情况)

    天气预报读取,充分利用了Ajax技术来体现页面无刷新. 如果想获取源码,进一步学习和交流,可以回复,留下你的Email.  1.  2  3    <link href="Style/ ...

  3. 如何使用Ajax技术开发Web应用程序(2)

    在上一篇文章中,我们讨论了如何通过javascript从一个远程XML文件中取得数据.在这篇文章中,我们将学会怎样对数据作更复杂的处理.作为一个示例,我们会准备一组XML数据,将数据分割成独立的片断并 ...

  4. Asp.net中的AJAX学习记录之一 AJAX技术的崛起与Asp.net AJAX的诞生

      最近开始学习Asp.net中的AJAX,可能我的高手朋友们会说:"走还不稳呢!怎么就想学跑了?"呵呵!主要是我在做项目中体会到AJAX真的是很好的一门技术,应该好好的学习一下, ...

  5. Java Web - Ajax技术

    一 为什么会有Ajax技术的出现 想必大家肯定用过百度,当我们在百度的搜索框中输入文字的时候,下面就会自动出现你可能希望搜索的内容,但是页面中的其他内容都没有变化: 可以想象,这些内容都是根据在输入框 ...

  6. ajax结合java,ajax技术应用详细分析(后端java与客户端请求的结合)

    Ajax 技术应用 先回看 模态框的使用 js比较薄弱 如上 比如这部分 加粗样式 如下 是BOM窗口对象 ** js最薄弱 建议在浏览器练习 ** confirm方法 跳转练习 新疑问:怎么分辨js ...

  7. XMLHttpRequest对象AJAX技术的基本使用

    AJAX技术 文章目录 AJAX技术 Ajax技术的诞生 一.Ajax的概念? 二.XMLHttpRequest对象的概念 1.XMLHttpRequest对象的属性 2.XMLHttpRequest ...

  8. php js 二级联动_PHP+ajax实现二级联动菜单功能示例

    本文实例讲述了PHP+ajax实现二级联动菜单功能.分享给大家供大家参考,具体如下: 如何实现二级联动 工作原理 二级联动在开发中是比较常见的一个技术点,它主要运用了JS的局部刷新技术ajax,不同于 ...

  9. AJAX技术入门基础

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. A ...

最新文章

  1. 一行代码不用写,就可以训练、测试、使用模型,这个star量1.5k的项目帮你做到...
  2. lan交换和无线教师手册_简单几步,无线路由器变交换机
  3. AptitudeSystem 2.0
  4. wap手机网页html5通过特殊链接移动设备:打电话,发短信,发邮件详细教程
  5. (转)SQL Server 监控统计阻塞脚本信息
  6. Docker 架构原理剖析,万字详解!
  7. xml中特殊含义的字符_mybatis中的作用
  8. IE6,7,8,FF css hack
  9. 自适应各终端懒人网址导航源码v1.6
  10. Barcode模块管理条码扫描识别
  11. PC微信机器人之实战分析微信加人call
  12. ubuntu下matplotlib的字体设置(新罗马字体)
  13. win7计算机ip地址怎么查,win7电脑的IP地址怎样查看
  14. hdu6069 Counting Divisors
  15. Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
  16. 云服务器重装选哪个版本不卡,黑鲨详解关于重装系统Win7的版本选择问题
  17. 接口调用成功,功能实现但是返回404报错
  18. ios调用微信支付提示当前页面的URL未注册
  19. 决策树-ID3与C4.5
  20. IDEA系列:最新IntelliJ IDEA下载地址(社区版和专业版)

热门文章

  1. jq ajax异步上传图片插件,jQuery异步上传文件插件ajaxFileUpload详细介绍
  2. python中文字符_python处理中文字符
  3. 计算机专业毕业论文的参考文献,计算机专业毕业专著类参考文献 计算机专业毕业论文参考文献哪里找...
  4. [RDMA] 高性能异步的可靠消息传递和RPC :Accelio
  5. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?
  6. 群晖备份linux分区,黑群晖二合一系统无损扩充系统分区方法补充
  7. 定义python的色条_Python:定义颜色曲线部分
  8. ios 中ARC与非ARC的转换
  9. 王艳 201771010127《面向对象程序设计(java)》第十七周学习总结
  10. javascript 常用知识点