[黑马程序员]ajax 城市三级联动

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------


客户端代码

<html>
<head>
    <title></title>
    <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        $(function () {
            //初始化省份列表
            //参数id为向服务器所要请求级别
            //1:为省份
            //2:为城市
            //3:为区县
            //value:0为省份的加载,其他的选中项的值
            $.post("ashx/Address.ashx", { id: 1, value: 0 }, function (data, status) {
                //将data装换成object
                var json = eval("(" + data + ")");
                //移除省份中的所有项
                $("#sltProvince option").remove();
                //添加省份中的默认选项
                $("#sltProvince").append("<option value='0'>-请选择省份-</option>");
                //遍历json对象的项,并装换成控件添加到省份下拉菜单中
                $.each(json.p, function (index, item) {
                    $("#sltProvince").append("<option value='" + item.id + "'>" + item.value + "</option>");
                });
            });

            //省份下拉菜单的更改选项事件
            $("#sltProvince").change(function () {
                //获取省份的id值
                var val = $(this).val();

                $("#sltCity option").remove();
                $("#sltCity").append("<option value='0'>-请选择城市-</option>");
                $("#sltDistrict option").remove();
                $("#sltDistrict").append("<option value='0'>-请选择县区-</option>");

                //如果val为0,说明没有选择省份
                //所以将城市和县区的选项都更改成默认的状态
                if (val == "0") {
                    return;
                }
                else {
                    //通过ajax与服务器交互,获取选中省份对应的所有城市,添加到城市下来菜单中
                    $.post("ashx/Address.ashx", { id: 2, value: val }, function (data, status) {
                        var json = eval("(" + data + ")");
                        $.each(json.c, function (index, item) {
                            $("#sltCity").append("<option value='" + item.id + "'>" + item.value + "</option>");
                        });
                    });
                }
            });

            //城市下来菜单的更改事件
            $("#sltCity").change(function () {
                //选中的城市的值
                var val = $(this).val();

                $("#sltDistrict option").remove();
                $("#sltDistrict").append("<option value='0'>-请选择县区-</option>");

                //如果val为0,说明没有选择城市
                //所以将县区的选项都更改成默认的状态
                if (val == "0") {
                    return;
                }
                else {
                    //通过ajax与服务器交互,获取选中省份对应的所有城市,添加到城市下来菜单中
                    $.post("ashx/Address.ashx", { id: 3, value: val }, function (data, status) {
                        var json = eval("(" + data + ")");
                        $.each(json.d, function (index, item) {
                            $("#sltDistrict").append("<option value='" + item.id + "'>" + item.value + "</option>");
                        });
                    });
                }
            });
        });
    </script>
</head>
<body  style="background-color:#d3eaaf">
        <select id="sltProvince" style=" width:120px;">
            <option value="0">-请选择省份-</option>
        </select>
        <select id="sltCity" style=" width:120px;">
            <option value="0" >-请选择城市-</option>
        </select>
        <select id="sltDistrict" style=" width:120px;">
            <option value="0">-请选择县区-</option>
        </select>   
</body>
</html>

服务器端代码(ashx)

<%@ WebHandler Language="C#" Class="Address" %>

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public class Address : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        //获取id属性
        string id = context.Request["id"];
        //获取value   这个value是查询的条件
        string value = context.Request["value"];
        string output = "";//最终要输出的信息

        //请求省份信息
        if (id == "1")
        {
            output = GetProvince();
        }
        //请求城市信息  这是value的选中的省份的id
        else if (id == "2")
        {
            //如果value==0,说明没有选择省份
            if (value == "0")
            {
                return;
            }
            else
            {
                //获取指定省份的城市的信息(json格式的字符串)
                output = GetCity(value);
            }
        }
        //请求的县区的信息,这里value的值为选中的城市的id
        else if (id == "3")
        {
            //如果value==0,说明没有选择城市
            if (value == "0")
            {
                return;
            }
            else
            {
                //获取指定城市的县区的信息(json格式的字符串)
                output = GetDistrict(value);
            }
        }
        context.Response.Write(output);
    }

    /// <summary>
    /// 获取省份的信息
    /// </summary>
    /// <returns>返回获得省份信息(json格式)</returns>
    private string GetProvince()
    {
        SqlDataReader dr=DBOperater.getDataReader("SELECT * FROM S_Province");       
        string ProvinceMsg = "";//存储省份信息的变量
        while (dr.Read())
        {
            //将字符串拼接成json格式
            ProvinceMsg += "{id:" + dr["ProvinceID"].ToString() + ",value:'" + dr["ProvinceName"].ToString() + "'},";
        }
        DBOperater.getConnection().Close();//关闭数据库连接
        ProvinceMsg = ProvinceMsg.Substring(0, ProvinceMsg.Length - 1);
        ProvinceMsg = "{p:[" + ProvinceMsg + "]}";//拼接后最终的格式信息
        return ProvinceMsg;
    }

    /// <summary>
    /// 根据省份信息获取城市信息
    /// </summary>
    /// <param name="value">省份id号</param>
    /// <returns>城市的信息(json格式)</returns>
    private string GetCity(string value)
    {
        SqlDataReader dr = DBOperater.getDataReader("SELECT * FROM S_City where ProvinceID='" + value + "'");        
        string CityMsg = "";//存储城市信息的变量
        while (dr.Read())
        {
            CityMsg += "{id:" + dr["CityID"].ToString() + ",value:'" + dr["CityName"].ToString() + "'},";
        }
        DBOperater.getConnection().Close();//关闭数据库连接
        CityMsg = CityMsg.Substring(0, CityMsg.Length - 1);
        CityMsg = "{c:[" + CityMsg + "]}";
        return CityMsg;
    }

    /// <summary>
    /// 获取区县信息
    /// </summary>
    /// <param name="value">城市的id</param>
    /// <returns>县区的信息(json格式)</returns>
    private string GetDistrict(string value)
    {
        SqlDataReader dr=DBOperater.getDataReader("SELECT * FROM S_District where CityID='" + value + "'");
        string DistrictMsg = "";//存储县区信息的变量
        while (dr.Read())
        {
            DistrictMsg += "{id:" + dr["DistrictID"].ToString() + ",value:'" + dr["DistrictName"].ToString() + "'},";
        }
        DBOperater.getConnection().Close();//关闭数据库连接
        DistrictMsg = DistrictMsg.Substring(0, DistrictMsg.Length - 1);
        DistrictMsg = "{d:[" + DistrictMsg + "]}";
        return DistrictMsg;
    }


    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值