用ajax和asp.net实现智能搜索功能

简介: 用ajax和asp.net实现智能搜索功能

近来一直在开发股票模拟系统,终于告一段落了,回想起来感慨很多。突然想应该做点总结了,想来想去还是觉得通过写点日志来把相关的知识点记录下来,下面就我在项目中经常用到的动态提示搜索选项功能的实现。

 

第一步,先做好搜索页面

 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <script language=javascript src=JScript.js type="text/javascript" ></script>
    <style>
     #result{
 position:absolute;
 width:150px;
 height:auto;
 margin:0px;
 z-index:1;
 font-size:14px;
 border: 1px dashed #ccccc4;
 display:none;
}
#result .firstHang{
  background-color:#DDDDDD;
  height:15px;
  padding-top:5px;
}
#result  b{
 width:61px;
 float:left;
}
#result  nobr{
 width:61px;
 float:left;
}
#result .otherHang{
 background-color:#FFFFFF;
 height:15px;
  padding-top:5px;
}
#content{
  margin-left:0px;
  padding-left:0px;
}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div align=center style="padding-top:100px">
     <input id="searchTxt" onkeyUp="startRequest(this.value)" /> <!-- 输入框 -->
    </div>
      <div id="result"  align="center">  <!-- 下拉搜索框 -->
  <div class="firstHang">
     <b>搜索</b><b>标题</b>
  </div>
  <div id="stockListDiv"></div>
   </div>
    </form>
</body>
</html>
<script language="javascript">
var obj=document.getElementById("result");
var rela=document.getElementById("searchTxt");
SetDivLocation(obj,rela);
function SetDivLocation(obj,rela)             //设置下拉搜索框与输入框的相对位置
{
   var   x,y;  
  var oRect=rela.getBoundingClientRect();   //获得输入框的位置
   x=oRect.left;
   y=oRect.top;
   obj.style.left=x+"px";                   //这里要加上px,否则在fiexfox就会失效
   obj.style.top=y+rela.offsetHeight+"px";
}
</script>

第二步,添加返回搜索结果的页面,该页面由于不用在客户端显示,所以就不用做界面。


Imports System.Text
Partial Class Search
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim searchContent As String = Request("content").ToString  '获取搜索内容
        Dim searchResult As New StringBuilder
        If IsNumeric(searchContent) Then                  '判断是否为数字,输入不同的内容
            searchResult.Append("<div class='otherHang'><nobr>11</nobr><nobr>11</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>22</nobr><nobr>22</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>22</nobr><nobr>22</nobr></div>")
        Else
            searchResult.Append("<div class='otherHang'><nobr>aa</nobr><nobr>aa</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>bb</nobr><nobr>bb</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>cc</nobr><nobr>cc</nobr></div>")
        End If
        Response.Write(searchResult.ToString) '向客户端发送结果
        Response.End()                                        '关闭客户端输出流
    End Sub
End Class

第三步就是最关键的一步了

// JScript 文件
var xmlHttp;
function cratexmlHttpRequest()
{ 
    //判断是否为IE浏览器
 if(window.ActiveXObject)
 {
     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 else if(window.XMLHttpRequest)
 {
     xmlHttp=new window.XMLHttpRequest();
 }
}
//启动对页面的请求
function startRequest(content)
{
   cratexmlHttpRequest();
 //设置请求状态变化调用的方法
 xmlHttp.onreadystatechange=handleState;
 //建立对服务器的调用
 var url="Search.aspx?content="+escape(content); '发送页面url
 xmlHttp.open("get",url,true);
 xmlHttp.send(null);
}
function handleState()
{
  try{
    if(xmlHttp.readyState==4)
 {
    if(xmlHttp.status==200)
  {
       var data=xmlHttp.responseText;    '得到搜索结果
            var result=document.getElementById("result");
   var stockListDiv=document.getElementById("stockListDiv");
   if(data=="")            '如果搜索结果为空,不显示下拉框
   {
     result.style.display="none";
           stockListDiv.innerHTML="";
   }
   else
   {
      stockListDiv.innerHTML=data;   '显示下拉框
      result.style.display="block";
   }
  }
 }
 }
catch(error)
 {error.message}
}

最后实现的效果如下:


相关文章
|
4月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
134 4
|
1月前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
1月前
|
XML 开发框架 .NET
.NET 9 中 LINQ 新增功能实操
.NET 9 中 LINQ 新增功能实操
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
1月前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
1月前
|
网络协议 网络安全 Apache
一个整合性、功能丰富的.NET网络通信框架
一个整合性、功能丰富的.NET网络通信框架
|
1月前
|
消息中间件 开发框架 .NET
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
【11月更文挑战第7天】本文介绍了 ASP.NET Core 中的 `IHostedService` 和 `BackgroundService` 接口及其用途。`IHostedService` 定义了 `StartAsync` 和 `StopAsync` 方法,用于在应用启动和停止时执行异步操作,适用于资源初始化和清理等任务。`BackgroundService` 是 `IHostedService` 的抽象实现,简化了后台任务的编写,通过 `ExecuteAsync` 方法实现长时间运行的任务逻辑。文章还提供了创建和注册这两个服务的实战步骤,帮助开发者在实际项目中应用这些功能。
|
2月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
3月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
37 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
2月前
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
18 0