上一篇联动一种只是城市用ajax请求获取并渲染,这里将省份也用ajax请求并渲染

1、HTML

  1. <select id="province">
  2. <option>请选择</option>
  3. </select>
  4. <select id="city">
  5. <option>请选择</option>
  6. </select>

2、JS

  1. /*
  2. * 省份信息和城市信息全部来源于服务器端
  3. * * 第一种思路 - 基于前一个案例
  4. * * 获取省份信息,使用一次Ajax的异步请求
  5. * * 根据省份信息,再次使用Ajax的异步请求
  6. * * 第二种思路 - 重新思考
  7. * * 一次性将省份和城市获取
  8. */
  9. // a. 创建XMLHttpRequest对象
  10. var xhr = getXhr();
  11. // 第一种思路 - 基于前一个案例
  12. // 1. 当页面加载时,实现Ajax的异步请求 - 省份信息
  13. window.onload = function(){
  14. // b. 建立连接 - open("get","07_province.php");
  15. xhr.open("get","07_province.php");
  16. // c. 发送请求 - send(null)
  17. xhr.send(null);
  18. // d. 接收服务器端的数据
  19. xhr.onreadystatechange = function(){
  20. if(xhr.readyState==4&&xhr.status==200){
  21. var data = xhr.responseText;
  22. // 将字符串转换为数组
  23. var provinces = data.split(",");
  24. // 遍历数组
  25. for(var i=0;i<provinces.length;i++){
  26. // 创建option元素添加到id为province元素上
  27. var option = document.createElement("option");
  28. var text = document.createTextNode(provinces[i]);
  29. option.appendChild(text);
  30. var province = document.getElementById("province");
  31. province.appendChild(option);
  32. }
  33. }
  34. }
  35. };
  36. // 2. 当用户选择省份信息时,实现Ajax的异步请求 - 城市信息
  37. var province = document.getElementById("province");
  38. province.onchange = function(){
  39. // 清空
  40. var city = document.getElementById("city");
  41. var opts = city.getElementsByTagName("option");
  42. for(var z=opts.length-1;z>0;z--){
  43. city.removeChild(opts[z]);
  44. }
  45. if(province.value != "请选择"){
  46. xhr.open("post","07_cities.php");
  47. xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  48. xhr.send("province="+province.value);
  49. xhr.onreadystatechange = function(){
  50. if(xhr.readyState==4&&xhr.status==200){
  51. var data = xhr.responseText;
  52. var cities = data.split(",");
  53. for(var i=0;i<cities.length;i++){
  54. var option = document.createElement("option");
  55. var text = document.createTextNode(cities[i]);
  56. option.appendChild(text);
  57. city.appendChild(option);
  58. }
  59. }
  60. }
  61. }
  62.  
  63. };
  64. //定义获取Ajax核心对象的函数
  65. function getXhr(){
  66. var xhr = null;
  67. if(window.XMLHttpRequest){
  68. xhr = new XMLHttpRequest();
  69. }else{
  70. xhr = new ActiveXObject("Microsoft.XMLHttp");
  71. }
  72. return xhr;
  73. }

3、province.php

  1. <?php
  2. echo '山东省,辽宁省,吉林省';
  3. ?>

cities.pnp

  1. <?php
  2. // 用于处理客户端请求二级联动的数据
  3. // 1. 接收客户端发送的省份信息
  4. $province = $_POST['province'];
  5. // 2. 判断当前的省份信息,提供不同的城市信息
  6. switch ($province){
  7. case '山东省':
  8. echo '青岛市,济南市,威海市,日照市,德州市';
  9. break;
  10. case '辽宁省':
  11. echo '沈阳市,大连市,铁岭市,丹东市,锦州市';
  12. break;
  13. case '吉林省':
  14. echo '长春市,松原市,吉林市,通化市,四平市';
  15. break;
  16. }
  17. // 服务器端响应的是字符串
  18. ?>

Ajax实现的城市二级联动二的更多相关文章

  1. Ajax实现的城市二级联动一

    前一篇是把省份和城市都写在JS里,这里把城市放在PHP里,通过发送Ajax请求城市数据渲染到页面. 1.html <select id="province"> < ...

  2. Ajax实现的城市二级联动三

    把之前2篇整合在一起 1.html <select id="province"> <option>请选择</option> </selec ...

  3. jq简单城市二级联动实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js实现城市二级联动列表

    这个是一个同事写的,我看着有用,就cv下来了. 程序功能主要逻辑是: 1.当一级标签市显示默认状态 '-请选择-'时,二级标签要隐藏 2.一级标签选中城市时,二级标签显示在页面,并列出响应市区 3.当 ...

  5. 使用jquery.ajax实现省市的二级联动(SSH架构)

    首先实现jquery ajax的二级联动 要下载个jquery.js 我在这里就不准备了 自行百度下载 背景介绍:通过部门的ID来查找部门下的所有班级 我实现二级联动的思路是:先查询所有部门 显示在页 ...

  6. asp.net mvc jQuery 城市二级联动

    页面效果图: 数据库表结构: 首先在数据库中创建省级.城市的表,我的表如下:我用了一张表放下了省级.城市的数据,用level划分省份和城市,parentId表示该城市所在省份的id 主要文件有:ind ...

  7. 最新城市二级联动json(2017-09)

    { '安徽': [ '合肥', '芜湖', '蚌埠', '淮南', '马鞍山', '淮北', '铜陵', '安庆', '黄山', '阜阳', '宿州', '滁州', '六安', '宣城', '池州', ...

  8. DOM之城市二级联动

    1.HTML内容 <select id="province"> <option>请选择</option> <option>山东省&l ...

  9. Mybatis + js 实现下拉列表二级联动

    Mybatis + js 实现下拉列表二级联动 学习内容: 一.业务需求 二.实现效果 三.代码实现 1. province_city.jsp 2. TwoController 2. Province ...

随机推荐

  1. 23.HashMap

    HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据 ...

  2. delphi如何在form显示出来后处理指定的事件(例如自动登录)

    最近写一个delphi客户端,遇到一个自动登录问题,已经解决了思路如下: 1.在Form的oncreate事件中读取用户配置文件,检查及处理是否保存了用户密码,是否自动登录,如果需要自动登录, 自动登 ...

  3. WPF常用样式总结

    常用控件样式: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation ...

  4. 使用netstat命令查看端口的使用情况

    Windows如何查看端口占用情况操作步骤如下: 开始--运行--cmd 进入命令提示符,输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管 ...

  5. 代码的重构(Refactor-Extract)

    1.vs中的代码重构快捷方式:Refactor-Extract: 选中两个需要重构的部分完整代码,右击,选中Refactoe-Extract-Extract Method: 该选中的代码会自动形成一个 ...

  6. Redis最新面试题26题(初级、中级Redis面试题)

    Redis 1级(入门基础) 1.Redis有哪些数据类型? string,list,set,sorted set(Zset),hash 2.集合和列表有什么区别? 列表是可以从两端推入.推出数据的队 ...

  7. JavaScript中原型链的那些事

    引言 在面向对象的语言中继承是非常重要的概念,许多面向对象语言都支持两种继承方式:接口继承和实现继承.接口继承制只继承方法签名,而实现继承继承实际的方法.在ECMAScript中函数没有签名,所以EC ...

  8. web自动化测试(java)---元素定位

    和python类似,java-selenium也提供了很多种元素定位的方法,具体如下: findElement(By.id()) findElement(By.name()) findElement( ...

  9. python-UiAutomator学习&使用

    一.安装 源码地址: https://github.com/xiaocong/uiautomator#basic-api-usages ①下载zip包,解压到本地目录下 ②进入对应目录下,执行 $su ...

  10. ZolltyMVC配置-说明文档

    目前XML里支持的一级元素如下: <!-- 配置 -->     <xsd:element ref="mvc"/>     <xsd:element ...