利用ajax怎么实现一个动态下拉框?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
示例:
<select> <option>信息一</option> <option>信息二</option> <option>信息三</option> <option>信息四</option> </select>
但是有些项目或者工程是需要将数据库中的数据呈现出来并提供选择的,下拉的内容会随数据库中数据的变化而变化。首先我们有asp组件可以帮我们做这这件事情,DropDownList组件,只需要将数据库中查询得到的数据添加进该组件中,在前台即可以显示出动态下拉的效果。如果想更有新意,不依赖于传统组件,ajax就是个不错的选择。下面一步步来通过ajax实现动态下拉的效果。
1.js发出ajax请求:
$(document).ready(function () { $.ajax({ timeout: 3000, async: false, type: "POST", url: "WareHouse.ashx", dataType: "json", data: { warehouse: $("#issued_sub_key_c").val(), }, success: function (data) { for (var i = 0; i < data.length; i++) { $("#issued_sub_key_c").append("<option>" + data[i].Name + "</option>"); } } }); });
ajax请求WareHouse.ashx(一般处理程序)来获得数据,请求成功后将返回的json数据附加到id为issued_sub_key_c的select标签。值得注意的是这里将async的属性改为了false,async的默认状态为true,即为异步。值改为false就是同步了。但是当async为false的时候,ajax请求完数据之前,浏览器一直处于锁死状态,这样会让使用者认为程序崩溃了,所以就人为的添加了一个超时(timeout),这样就不会出现程序崩溃的假象。回到话题开始,为什么要将async改为false呢?原因就是当ajax是异步请求的时候进入到页面后出现下拉框数据还未同步,下拉框是空白数据(可以自己体验体验)。所以我们需要利用同步的特性并配合超时来完成下拉框的数据同步。
2.一般处理程序:从数据库返回的数据是List<string>类型,我们需要自己定义一个toJson()方法将list转化为json数据,然后返回json数据。
public string toJson(List<string> str) { StringBuilder json = new StringBuilder(); if (str == null) { return "null"; } json.Append("["); foreach (var item in str) { json.Append("{\"Name\":\""); json.Append(item); json.Append("\"},"); } return json.ToString().Substring(0, json.ToString().LastIndexOf(",")) + "]"; } /*得到并关联仓库(select标签)*/ public void ProcessRequest(HttpContext context) { SubinventoryDC subinventorydc = new SubinventoryDC(); List<string> list = new List<string>(); list = subinventorydc.getAllSubinventory(); string json = toJson(list); context.Response.ContentType = "text/plain"; context.Response.Write(json); }
3.前台页面:前台只需要定义一个id为issued_sub_key_c的select标签。注意select标签须得有一个name,后台正是通过name来取得选中数据的值。取值方法:Request.Form["issued_sub_key_c"]。
<select id="issued_sub_key_c" name="issued_sub_key_c"> </select>
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。