022-异步加载省市区联动

AreaList.html

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <script src="js/jquery-1.7.1.min.js"></script>
 7     <script>
 8         //action:1表示省,2表示市,3表示区
 9         $(function () {
10             LoadPrivince();
11
12             //如下代码不能正常执行,原因是:执行此代码时,要获取省的信息,但是现在省中还没有绑定上数据
13             //LoadCity($(‘#provice‘).val());
14
15             //为对象注册事件处理程序
16             $(‘#provice‘).change(function () {
17                 LoadCity($(this).val());
18             });
19
20             //调用事件处理程序,模拟事件触发
21             //$(‘#provice‘).change();
22
23             $(‘#city‘).change(function () {
24                 LoadDistrict($(this).val());
25             });
26         });
27
28         function LoadPrivince() {
29             //这里是异步请求,只要发出去请求,这个方法就算执行完成
30             $.getJSON(
31                 ‘AreaList.ashx‘,
32                 {
33                     action: 1
34                 },
35                 function (data) {//{Id,Title}
36                     //[{},{},{}...]
37                     var province = $(‘#provice‘);
38                     $.each(data, function (index, item) {
39                         province.append(‘<option value="‘ + item.Id + ‘">‘ + item.Title + ‘</option>‘);
40                     });
41
42                     //执行下面代码时,表示省信息已经加载完成
43                     //LoadCity(province.val());
44                     province.change();
45                 }
46             );
47         }
48
49         function LoadCity(pid) {
50             $.getJSON(
51                 ‘AreaList.ashx‘,
52                 {
53                     action: 2,
54                     pid: pid
55                 },
56                 function (data) {
57                     var city = $(‘#city‘);
58                     city.empty();//清除之前绑定的市信息
59                     $.each(data, function (index, item) {
60                         city.append(‘<option value="‘ + item.Id + ‘">‘ + item.Title + ‘</option>‘);
61                     });
62                     LoadDistrict(city.val());
63                 }
64             );
65         }
66
67         function LoadDistrict(cid) {
68             $.getJSON(
69                 ‘AreaList.ashx‘,
70                 {
71                     action: 3,
72                     cid: cid
73                 },
74                 function (data) {
75                     var district = $(‘#district‘);
76                     district.empty();//清除原来绑定的数据
77                     $.each(data, function (index, item) {
78                         district.append(‘<option value="‘ + item.Id + ‘">‘ + item.Title + ‘</option>‘);
79                     });
80                 }
81             );
82         }
83     </script>
84 </head>
85 <body>
86     <select id="provice"></select>
87     <select id="city"></select>
88     <select id="district"></select>
89 </body>
90 </html>

AreaList.ashx

 1     public class AreaList : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             context.Response.ContentType = "text/plain";
 7
 8             int action = int.Parse(context.Request["action"]);
 9             List<AreaItem> list = new List<AreaItem>();
10             string sql;
11             DataTable dt;
12             SqlParameter p;
13             switch (action)
14             {
15                 case 1://查询省
16                     sql = "select provinceId,provinceName from s_province";
17                     list = DtToList(sql);
18                     break;
19                 case 2://查询市
20                     sql = "select cityid,cityname from s_city where [email protected]";
21                     p = new SqlParameter("@pid", context.Request["pid"]);
22                     list = DtToList(sql, p);
23                     break;
24                 case 3://查询区
25                     sql = "select districtid,districtname from s_district where [email protected]";
26                     p = new SqlParameter("@cid", context.Request["cid"]);
27                     list = DtToList(sql, p);
28                     break;
29             }
30
31             JavaScriptSerializer js = new JavaScriptSerializer();
32             string result = js.Serialize(list);
33             context.Response.Write(result);
34         }
35
36         public bool IsReusable
37         {
38             get
39             {
40                 return false;
41             }
42         }
43
44         private List<AreaItem> DtToList(string sql, params SqlParameter[] ps)
45         {
46             DataTable dt = SqlHelper.GetList(sql, ps);
47             List<AreaItem> list = new List<AreaItem>();
48             foreach (DataRow row in dt.Rows)
49             {
50                 list.Add(new AreaItem()
51                 {
52                     Id = Convert.ToInt32(row[0]),
53                     Title = row[1].ToString()
54                 });
55             }
56             return list;
57         }
58     }
59
60     public class AreaItem
61     {
62         public int Id { get; set; }
63         public string Title { get; set; }
64     }

SqlHelper.cs

 1     public static class SqlHelper
 2     {
 3         private static string connStr =
 4             System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
 5
 6         public static DataTable GetList(string sql, params SqlParameter[] ps)
 7         {
 8             using (SqlConnection conn = new SqlConnection(connStr))
 9             {
10                 SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
11                 sda.SelectCommand.Parameters.AddRange(ps);
12
13                 DataTable dt = new DataTable();
14                 sda.Fill(dt);
15
16                 return dt;
17             }
18         }
19
20         public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
21         {
22             using (SqlConnection conn = new SqlConnection(connStr))
23             {
24                 SqlCommand cmd = new SqlCommand(sql, conn);
25                 cmd.Parameters.AddRange(ps);
26
27                 conn.Open();
28                 return cmd.ExecuteNonQuery();
29             }
30         }
31
32         public static object ExecuteScalar(string sql, params SqlParameter[] ps)
33         {
34             using (SqlConnection conn = new SqlConnection(connStr))
35             {
36                 SqlCommand cmd = new SqlCommand(sql, conn);
37                 cmd.Parameters.AddRange(ps);
38
39                 conn.Open();
40                 return cmd.ExecuteScalar();
41             }
42         }
43
44     }

Web.config

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <!--
 4   有关如何配置 ASP.NET 应用程序的详细信息,请访问
 5   http://go.microsoft.com/fwlink/?LinkId=169433
 6   -->
 7
 8 <configuration>
 9   <system.web>
10     <compilation debug="true" targetFramework="4.5" />
11     <httpRuntime targetFramework="4.5" />
12   </system.web>
13   <connectionStrings>
14     <add name="conn" connectionString="server=.;database=web1;uid=sa;pwd=123"/>
15   </connectionStrings>
16 </configuration>
时间: 2024-10-06 18:50:28

022-异步加载省市区联动的相关文章

树形ztree 与angularjs结合,实现下级数据异步加载,点击复选框 填写到输入框里

html: <input value="" type="text" id="river_cut"   onclick="showMenu('river_cut_drop');" class=" btn btn-default  dropdown-toggle w200 input_ao" style="text-align:left;" /> <div class=&q

cocos2dx lua中异步加载网络图片,可用于显示微信头像

最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能会提供这个功能的地方,发现好像没有提供类似功能,那么只能自己动手写.所以我在ImageView这个类里面添加了一个成员方法,其实可以不写在ImageView里,而且我觉得非必需情况下还是不要修改引擎源码的好,因为如果源码改动比较多的话,将来引擎版本升级会比较麻烦.我写在ImageView里纯粹是想偷

Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)

这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚接触的人来说可能太少了,下面我就把我使用过程中所知道的写了下来,希望可以帮助自己和别人更深入了解这个库的使用和配置. GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader ,下载最新的库文件,并且导入到项目的

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下:  func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){         var ZYHImage:UIImage?         if url == nil {             return   

Android异步加载全解析之Bitmap

Android异步加载全解析之Bitmap 在这篇文章中,我们分析了Android在对大图处理时的一些策略--Android异步加载全解析之大图处理  戳我戳我 那么在这篇中,我们来对图像--Bitmap进行一个更加细致的分析,掌握Bitmap的点点滴滴. 引入 Bitmap这玩意儿号称Android App头号杀手,特别是3.0之前的版本,简直就是皇帝般的存在,碰不得.摔不得.虽然后面的版本Android对Bitmap的管理也进行了一系列的优化,但是它依然是非常难处理的一个东西.在Androi

Android异步加载全解析之开篇瞎扯淡

Android异步加载 概述 Android异步加载在Android中使用的非常广泛,除了是因为避免在主线程中做网络操作,更是为了避免在显示时由于时间太长而造成ANR,增加显示的流畅性,特别是像ListView.GridView这样的控件,如果getView的时间太长,就会造成非常严重的卡顿,非常影响性能. 本系列将展示在Android中如何进行异步加载操作,并使用ListView来作为演示的对象. 如何下载图像 下载自然是需要使用网络,使用网络就不能在主线程,在主线程就会爆炸.所以我们必须要在

Android异步加载全解析之使用多线程

异步加载之使用多线程 初次尝试 异步.异步,其实说白了就是多任务处理,也就是多线程执行,多线程那就会有各种问题,我们一步步来看,首先,我们创建一个class--ImageLoaderWithoutCaches,从命名上,大家也看出来,这个类,我们实现的是不带缓存的图像加载,不多说,我们再创建一个方法--showImageByThread,通过多线程来加载图像: /** * Using Thread * @param imageView * @param url */ public void sh

Android异步加载全解析之使用AsyncTask

Android异步加载全解析之使用AsyncTask 概述 既然前面提到了多线程,就不得不提到线程池,通过线程池,不仅可以对并发线程进行管理,更可以提高他们执行的效率,优化整个App.当然我们可以自己创建一个线程池,不过这样是很烦的,要创建一个高效的线程池还是挺费事的,不过,Android系统给我吗提供了AsyncTask这样一个类,来帮助我们快速实现多线程开发,它的底层实现,其实就是一个线程池. AsyncTask初探 AsyncTask,顾名思义就是用来做异步处理的.通过AsyncTask,

Android异步加载全解析之大图处理

Android异步加载全解析之大图处理 异步加载中非常重要的一部分就是对图像的处理,这也是我们前面用异步加载图像做演示例子的原因.一方面是因为图像处理不好的话会非常占内存,而且容易OOM,另一方面,图像也比文字要大,加载比较慢.所以,在讲解了如何进行多线程.AsyncTask进行多线程加载后,先暂停下后面的学习,来对图像的异步处理进行一些优化工作. 为什么要对图像处理 为什么要对图像进行处理,这是一个很直接的问题,一张图像,不管你拿手机.相机.单反还是什么玩意拍出来,它就有一定的大小,但是在不同