ASP Ajax 自动完成
在使用Google搜索时,在搜索栏输入文字的时候,搜索栏下方会弹出与输入内容非常相近的关键字,单击某一行时,自动将选中的关键字填入搜索栏。这种自动完成功能,在搜索资料的过程中,提供了许多帮助信息。本章节将讲述如何通过Ajax+ASP实现搜索栏自动完成。步骤如下所示:
(1)首先为本实例设计数据库,保存为db1.mdb,该数据库只有一个新闻表,表设计视图如表8-5所示,设计完成后把表名设置为news保存。
表8-5 设计news表的字段
字段名 | 字段类型 | 字段说明 |
id | html自动弹出公告代码自动编号 | 主键,自增列 |
title | 文本(255) | 新闻标题 |
keyword | 文本(50) | 关键字 |
content | 备注 | 新闻内容 |
(2)然后新建一个名为index.html的HTML文件,该文件为用户提供输入搜索关键字的文本框,以及实现自动完成的JavaScript代码。首先来看布局表单,内容如下所示:
<div >
请输入关键字:<input name="keyword" type="text" onkeyup="show_res(this.value)"/>
<input id="Button1" type="button" value="查询" />
</div>
<div id="res" >
<div id="res_content"></div>
<div ><a href="javascript:hid_res();">关闭</a></div>
</div>
(3)在<head>标记内为相关内容的<div>标记定义CSS样式,代码如下所示:
<style type="text/css">
#res ul{line-style:none;margin:0px;}
#res ul li{ list-style:none; line-height:25px;}
.spanleft{float:left;}
.spanright{float:right;}
</style>
(4)当用户在搜索栏中输入文字时,触发show_res()函数。该函数主要是创建XMLHttpRequest对象,向服务器端发送请求,并显示相关内容所在的<div>标记。代码如下所示:
<script language="javascript" type="text/javascript">
function show_res(keywordstr) {
var ElementById("res");
obj.style.left=keyword.offsetLeft+10;
p=keyword.offsetTop+38;
obj.style.display="";
var url = 'search.asp?keyword='+keywordstr;
createXMLHttpRequest();
adystatechange = handleStateChange;
XmlHttp.open( "GET", url, true );
XmlHttp.send( null );
if(keyword.value==""){
obj.style.display="none";
}
}
</script>
(5)编写XmlHttp对象的回调函数handleStateChange(),该函数实现将服务器端返回的数据显示在页面的相关内容<div>标记中。代码如下所示:
function handleStateChange(){
if( adyState == 4 ){
if(XmlHttp.status == 200 ){
//显示结果
var sponseText;
ElementById("res_content").innerHTML=result;
}
}
}
(6)编写单击相关内容<div>标记下方的“关闭”超链接的hid_res()函数,该函数实现隐藏相关内容<div>标记的功能。代码如下所示:
function hid_res(){
ElementById("res").style.display="none";
}
(7)编写服务器端响应程序。新建一个名为seach.asp的asp文件,该文件接收客户端传递的关键字,然后检索db1.mdb数据库中news表的数据,将相近的关键字及条数提取出来,以<ul>+<li>标记的形式返回给客户端。代码如下所示:
<%
response.Charset="gb2312"
keyword=request.QueryString("keyword")
if keyword<>"" then
sql="SELECT keyword, COUNT(keyword) AS mycount FROM news WHERE (keyword LIKE '"&keyword&"%') GROUP BY keyword"
set ute(sql)
returnstr="<ul>"
while f
returnstr=returnstr&"<li onmouseover=""this.style.cursor='hand';this.style.background='#4E69D8';lor='#ffffff';"" onmouseout=""this.style.background='#D2D2D2';lor='#000000';"" onclick=""keyword.value='" & rs("keyword") & "';hid_res();""><span class='spanleft'>" & rs("keyword") & "</span><span class='spanright'>" & rs("mycount") & "篇</span></li>"
rs.movenext
wend
if returnstr="<ul>" then
returnstr=""
else
returnstr=returnstr&"</ul>"
end if
rs.close
conn.close
response.Write(returnstr)
end if
%>
(8)保存整个网站,在浏览器中运行,效果如图8-11和图8-12所示。
图8-11 在搜索栏输入文字 图8-12 单击某一行自动填充
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论