Ajax实现的城市二级联动二

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

1、HTML

<select id="province">
    <option>请选择</option>
  </select>
  <select id="city">
    <option>请选择</option>
  </select>

2、JS

/*
     * 省份信息和城市信息全部来源于服务器端
     * * 第一种思路 - 基于前一个案例
     *   * 获取省份信息,使用一次Ajax的异步请求
     *   * 根据省份信息,再次使用Ajax的异步请求
     * * 第二种思路 - 重新思考
     *   * 一次性将省份和城市获取
     */
    // a. 创建XMLHttpRequest对象
    var xhr = getXhr();
    // 第一种思路 - 基于前一个案例
    // 1. 当页面加载时,实现Ajax的异步请求 - 省份信息
    window.onload = function(){
        // b. 建立连接 - open("get","07_province.php");
        xhr.open("get","07_province.php");
        // c. 发送请求 - send(null)
        xhr.send(null);
        // d. 接收服务器端的数据
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4&&xhr.status==200){
                var data = xhr.responseText;
                // 将字符串转换为数组
                var provinces = data.split(",");
                // 遍历数组
                for(var i=0;i<provinces.length;i++){
                    // 创建option元素添加到id为province元素上
                    var option = document.createElement("option");
                    var text = document.createTextNode(provinces[i]);
                    option.appendChild(text);
                    var province = document.getElementById("province");
                    province.appendChild(option);
                }
            }
        }
    };
    // 2. 当用户选择省份信息时,实现Ajax的异步请求 - 城市信息
    var province = document.getElementById("province");
    province.onchange = function(){
        // 清空
        var city = document.getElementById("city");
        var opts = city.getElementsByTagName("option");
        for(var z=opts.length-1;z>0;z--){
            city.removeChild(opts[z]);
        }
        if(province.value != "请选择"){
            xhr.open("post","07_cities.php");
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send("province="+province.value);
            xhr.onreadystatechange = function(){
                if(xhr.readyState==4&&xhr.status==200){
                    var data = xhr.responseText;
                    var cities = data.split(",");
                    for(var i=0;i<cities.length;i++){
                        var option = document.createElement("option");
                        var text = document.createTextNode(cities[i]);
                        option.appendChild(text);
                        city.appendChild(option);
                    }
                }
            }
        }

    };
    //定义获取Ajax核心对象的函数
    function getXhr(){
        var xhr = null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else{
            xhr = new ActiveXObject("Microsoft.XMLHttp");
        }
        return xhr;
    }

3、province.php

<?php
    echo ‘山东省,辽宁省,吉林省‘;
?>

cities.pnp

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

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

jsp+ajax+serverlet实现省市二级联动

jsp界面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&g

2016-07-05 JavaScript实现省份城市二级联动

简介:利用JavaScript实现省份城市二级联动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta charset="UTF-8"><title>New Document </title><script language="JavaScript" type=&

城市二级联动

数据库添加需要的省份和城市名 index /*** 查询管理员的省份* @author liuz*/public function selProvince() {$Area = M ( 'area' );$selCity = array ();$selPro = $Area->distinct ( true )->field ( 'province' )->select ();$this->assign ( 'selPro', $selPro );}/*** 查询管理员的城市* @

js城市二级联动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta h

份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX【非数据库版】

package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; /** * 控制器 * @author AdminTC */ public class ProvinceCityAction extends ActionSupport{ priv

ajax实现二级联动

用js实现简单的ajax二级联动(如上图) HTML代码: 1 省份:<select id="province" onchange="getCity();" > 2 <option>请选择--</option> 3 </select> 4 城市:<select id="city"> 5 <option>请选择--</option> 6 </select>

学习aiax(javascript)--省份-城市二级下拉联动(POST方式)

1.jsp代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

用json文件实现城市的二级联动

第一次接触的二级联动是学习php的时候用ajax请求实现城市之间的二级联动; 后来项目接触到这中需求之后,发现我们的后台是Java(新手对Java的后台一窍不通); 所以就想到了用json的来实现,由于项目时间紧,任务重,根本不给我思考的机会(当时写了个json文件是报错的), 那么问题来了;该怎么办呢;突然灵机一动,用数组啊,一级将行政区写死在页面上,二级用change事件查找对应的县,区; 确实是实现了目的;但是代码的不清晰导致了很多问题; 今天有时间,回过头来,想了一会静静,然后就开始改代

Extjs二级联动 Extjs combo 省 城市

Extjs二级联动 Extjs combox根据省查询城市 实现效果如上图所示, store层代码: 1 Ext.define("ExtApp.store.TeacherProvince",{ 2 extend:"Ext.data.Store", 3 fields:['provinceCode','provinceName'], 4 autoLoad:true, 5 proxy:{ 6 type:"ajax", 7 url : 'getProvi