Ajax动态下拉列表

 许多页面上都涉及有下拉框,即select标签。对于简单的下拉框,被选择的数据是不需要改变的,我们可以用写死。这样下拉框的数据永远都是那几条。

  示例:

1 <select>
2     <option>信息一</option>
3     <option>信息二</option>
4     <option>信息三</option>
5     <option>信息四</option>
6 </select>

  但是有些项目或者工程是需要将数据库中的数据呈现出来并提供选择的,下拉的内容会随数据库中数据的变化而变化。首先我们有asp组件可以帮我们做这这件事

情,DropDownList组件,只需要将数据库中查询得到的数据添加进该组件中,在前台即可以显示出动态下拉的效果。如果想更有新意,不依赖于传统组件,ajax就是

个不错的选择。下面一步步来通过ajax实现动态下拉的效果。

  1.js发出ajax请求:

复制代码

 1 $(document).ready(function () {
 2     $.ajax({
 3         timeout: 3000,
 4         async: false,
 5         type: "POST",
 6         url: "WareHouse.ashx",
 7         dataType: "json",
 8         data: {
 9             warehouse: $("#issued_sub_key_c").val(),
10         },
11         success: function (data) {
12             for (var i = 0; i < data.length; i++) {
13                 $("#issued_sub_key_c").append("<option>" + data[i].Name + "</option>");
14             }
15         }
16     });
17 });

复制代码
  ajax请求WareHouse.ashx(一般处理程序)来获得数据,请求成功后将返回的json数据附加到id为issued_sub_key_c的select标签。值得注意的是这里将async的属性改为了false,async的默认状态为true,即为异步。值改为false就是同步了。但是当async为false的时候,ajax请求完数据之前,浏览器一直处于锁死状态,这样会让使用者认为程序崩溃了,所以就人为的添加了一个超时(timeout),这样就不会出现程序崩溃的假象。回到话题开始,为什么要将async改为false呢?原因就是当ajax是异步请求的时候进入到页面后出现下拉框数据还未同步,下拉框是空白数据(可以自己体验体验)。所以我们需要利用同步的特性并配合超时来完成下拉框的数据同步。

  2.一般处理程序:从数据库返回的数据是List类型,我们需要自己定义一个toJson()方法将list转化为json数据,然后返回json数据。

复制代码

1 public string toJson(List<string> str)
 2         {
 3             StringBuilder json = new StringBuilder();
 4 
 5             if (str == null)
 6             {
 7                 return "null";
 8 
 9             }
10 
11             json.Append("[");
12             foreach (var item in str)
13             {
14                 json.Append("{\"Name\":\"");
15                 json.Append(item);
16                 json.Append("\"},");
17             }
18 
19             return json.ToString().Substring(0, json.ToString().LastIndexOf(",")) + "]";
20         }
21 
22 
23         /*得到并关联仓库(select标签)*/
24 
25         public void ProcessRequest(HttpContext context)
26         {
27 
28             SubinventoryDC subinventorydc = new SubinventoryDC();
29 
30             List<string> list = new List<string>();
31 
32             list = subinventorydc.getAllSubinventory();
33 
34             string json = toJson(list);
35 
36             context.Response.ContentType = "text/plain";
37 
38             context.Response.Write(json);
39         }

复制代码
  

  3.前台页面:前台只需要定义一个id为issued_sub_key_c的select标签。注意select标签须得有一个name,后台正是通过name来取得选中数据的值。取值方

法:Request.Form[“issued_sub_key_c”]。

1 <select id="issued_sub_key_c" name="issued_sub_key_c">
2 
3 </select>

原博客传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值