autocomplete+ajax+json实现自动补全功能
2016-05-24 14:59
501 查看
由于项目需要做自动补全功能,所以去学习使用autocomplete
先看公司原来的写法,使用
百度了一下,说可能是因为jquery 跟autocomplete的版本不匹配,
随后去下了jquery
1.7.2和jquery-UI 最新版
引用后,
这样上面的写法报错,不明白原因,去找了一个别人写的版本
自己修改后为下
getCodeProject.ashx
打断点调试,发现获取到了数据,并且转换为json字符串返回了,
但是网页没有反应,调试了很久都不显示
后来把断点取消了就成功显示了
原因是,因为ajax会有timeout时间,打断点单步执行,ajax超时执行下步代码,导致autocomplete并没有获取到数据。
autocomplete的select参数,也就是我注释掉的那个,是选中行后会执行的函数,可以通过选中这个 然后给其他的控件赋值或者执行其他操作
先看公司原来的写法,使用
$("#projectName").autocomplete("../Handler/getCodeProject.ashx", countryOption).result(function (event, row, formatted) { cCode = row.cCode; cName = row.cName; setButton4Modi(); });这种写法,报错无法初始化autocomplete控件
百度了一下,说可能是因为jquery 跟autocomplete的版本不匹配,
随后去下了jquery
1.7.2和jquery-UI 最新版
引用后,
这样上面的写法报错,不明白原因,去找了一个别人写的版本
自己修改后为下
<span style="font-size:10px;"> $("#projectName").autocomplete({ source: function (request, response) { $.ajax({ async: false, //调用方式:同步 type: "POST", url: "../Handler/getCodeProject.ashx", dataType: "json", data: { "searchDbInforItem": request.term }, success: function (data) { response($.map(data, function (item) { return { label:item.projectName, //label为下拉框显示的标签 value:item.projectName, //value选中后显示的值 projectID: item.projectID, projectName: item.projectName, } })); } }); }, minLength: 1, // select: function (event, ui) { // log(ui.item ? //"Selected: " + ui.item.projectID + " aka " + ui.item.projectName : //"Nothing selected, input was " + this.value); // } });</span>这样通过ajax获取数据,
getCodeProject.ashx
<span style="font-size:10px;">using System.Web; using localhost; using System.Web.SessionState; using System.Data; /// <summary> /// getCodeDictionary 摘要说明 /// 功 能:获取指定的项目信息 /// 作 者:卢嘉诚 /// 编写日期:2016-5-24 /// </summary> public class getCodeProject : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { //获取ajax传入的参数: string inputCode = context.Request.Form["searchDbInforItem"].ToString(); //文本字段名 //初始化服务: FinancialSystem cd = new FinancialSystem(); cd.pageHeaderValue = initWeb.InitWebServiceProxy(); DataSet result = cd.getProjectListByInputCode( inputCode, "5"); DataTable dt = result.Tables[0]; cd.Dispose(); //装配成autocomplete控件指定的格式指定的 string Json = toJson.DataTableToJson("", dt, "projectID,projectName"); context.Response.ContentType = "text/plain"; context.Response.Write(Json); } public bool IsReusable { get { return false; } } }</span>
打断点调试,发现获取到了数据,并且转换为json字符串返回了,
但是网页没有反应,调试了很久都不显示
后来把断点取消了就成功显示了
原因是,因为ajax会有timeout时间,打断点单步执行,ajax超时执行下步代码,导致autocomplete并没有获取到数据。
autocomplete的select参数,也就是我注释掉的那个,是选中行后会执行的函数,可以通过选中这个 然后给其他的控件赋值或者执行其他操作
相关文章推荐
- 使用 Python 处理 JSON 格式的数据
- Ajax
- $.ajax()方法详解
- jQuery ajax - ajax() 方法
- 使用Ajax实现异步用户名验证
- 使用ajax实现用户登录验证(升级版)
- XML 与 JSON 优劣对比
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- VBA将excel数据表生成JSON文件
- 再谈Jquery Ajax方法传递到action(补充)
- Dom在ajax技术中的作用说明
- newtonsoft.json解析天气数据出错解决方法
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- vbs 解析json jsonp的方法
- Ruby和Ruby on Rails中解析JSON格式数据的实例教程
- Extjs4如何处理后台json数据中日期和时间
- C#实现将类的内容写成JSON格式字符串的方法
- ajax中data传参的两种方式分析