zoukankan      html  css  js  c++  java
  • 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;
        }
        // 服务器端响应的是字符串
    ?>
  • 相关阅读:
    [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
    [C# 开发技巧系列]使用C#操作Word和Excel程序
    全面解析C#中参数传递
    VSTO之旅系列(四):创建Word解决方案
    [C# 开发技巧系列] 使用C#操作幻灯片
    VSTO之旅系列(五):创建Outlook解决方案
    [C# 开发技巧系列]C#如何实现图片查看器
    [你必须知道的异步编程]——异步编程模型(APM)
    [你必须知道的异步编程]——基于任务的异步模式
    [C# 开发技巧系列]如何动态设置屏幕分辨率
  • 原文地址:https://www.cnblogs.com/-walker/p/6417166.html
Copyright © 2011-2022 走看看