使用javascript ajax C#实现类似百度的搜索框效果

先看一下最终效果  样式不太好看,但是功能是完全可行的,在文本框中输入文字之后,会实现自动搜索的功能。

首先介绍一下原理:

文本框下方是一个div,里面是一个ul标签,初始状态此ul中不包含任何的li标签。

当文本框文字改变的时候,使用ajax把文本框内容取出来,传递到后台,在后台中从数据库查询数据并把结果返回到前台页面。

返回的结果格式设置为:A,B,C,D;以便在前台实现字符串分割。

前台页面把返回的字符串切分成数组,依次遍历并给ul添加li节点。

具体方法:

①前台布局就不多说了 ,重要的是给文本框添加事件 onPropertyChange ="change(this)" ,当文字改变时触发,这个是在IE下的,火狐也有对应的,大家可以搜索一下。

@js代码:

<script language="javascript" type="text/javascript">
    function ajax(url, funSucc, fail) {
        //1.解决浏览器兼容性问题 创建AJAX对象
        if (window.XMLHttpRequest) {
            var oAjax = new XMLHttpRequest();
        }
        else {
            var oAjax = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //2.连接服务器
        oAjax.open("GET", url, true);
        //3.发送请求
        oAjax.send();
        //4.接收返回
        oAjax.onreadystatechange = function () {

            if (oAjax.readyState == 4) { //响应解析完成
                if (oAjax.status == 200) {
                    funSucc(oAjax.responseText);

                }
                else { if (fail) { fail(oAjax.status); } }

            }

        }

    };

    function change(obj) {
        var odiv = document.getElementById("div_context");
        odiv.style.display = "block";       //div默认不可见,文文字改变之后变为可见状态
        var text = document.getElementById("Text1");
        var add_ul = document.getElementById("ul_1");
        add_ul.innerHTML = "";              //每次改变之后,先把之前的内容清空
        var input = obj.value;
        var url = "search.aspx?search=" + input + "&t=" + Math.random(); //给后台传参,防止缓存
        var arr = new Array();              //保存数据用的数组

        ajax(url, function (retext) {       //调用ajax,参数retext就是后台的返回值

            arr = retext.split(",");        //切分字符串
            for (var i = 0; i < arr.length; i++) {
                var new_li = document.createElement("li");  //新建节点
                new_li.innerHTML = arr[i];
                add_ul.appendChild(new_li);
            }

            var lis = add_ul.getElementsByTagName("li"); //为每个添加的节点设置单击事件
            for (var i = 0; i < lis.length; i++) {
                lis[i].onclick = function () {
                    text.value = this.innerHTML;
                    odiv.style.display = "none";
                }

            }

        });
    }
</script>

在这里需要注意,因为用户输入很多都是汉字,所以需要使用gb2312字符集,在web.config文件中加入

<system.web>

<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />

</system.web>

③后台代码

在pageload中:

        string my_search = Request.QueryString["search"];
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "data source=.\\sqlexpress; initial catalog=ff; user id=sa;password=123";//连接字符串

        //第一种方式
         SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "select top 7 [theme] from table1 where theme like ‘%"+my_search+"%‘"; //最多显示七条数据
        cmd.Connection = con;
        SqlDataAdapter ada = new SqlDataAdapter();
        ada.SelectCommand = cmd;
        DataSet set=new DataSet();
        ada.Fill(set,"theme");

        StringBuilder str=new StringBuilder();
        for (int i = 0; i < set.Tables[0].Rows.Count; i++)  //遍历表并给字符串赋值
        {
                str.Append("," + set.Tables[0].Rows[i].ItemArray[0].ToString());

        }
        if (str.Length > 1)  //删除字符串首部的逗号
        {
            str.Remove(0, 1);
        }
        Response.Write(str.ToString());

        //第二种方式
         //使用sql存储过程
        //SqlCommand cmd = new SqlCommand();
        //cmd.CommandType = CommandType.StoredProcedure;
        //cmd.CommandText = "search";
        //cmd.Parameters.Add("@vin",SqlDbType.VarChar,100,"theme");
        //cmd.Parameters[0].Value = my_search;
        //cmd.Connection = con;
        //SqlDataAdapter ada = new SqlDataAdapter();
        //ada.SelectCommand = cmd;
        //DataSet set = new DataSet();
        //ada.Fill(set, "theme");

        //string str_response = set.Tables[0].Rows[0].ItemArray[0].ToString();

        //Response.Write(str_response);

        Response.End();
    }
}
/*

存储过程 search:

ALTER PROCEDURE dbo.search
(@vin varchar(100)
 )

AS
	declare @str varchar(700);
	set @str=(select top 7 [theme]   from forum where theme like ‘%‘[email protected]+‘%‘ for xml path(‘‘));
	set @str=stuff(replace(replace(@str,‘</theme>‘,‘‘),‘<theme>‘,‘,‘),1,1,‘‘)  

	select @str;
	RETURN  ;
*/

因为ajax传参之后,要想获取后台返回值,必须控制后台respon.write输出内容的格式,所以介绍了两种方式:

一种是用C#,另一种是用SQl ,原理都差不多

时间: 2024-08-06 07:36:40

使用javascript ajax C#实现类似百度的搜索框效果的相关文章

ajax+JQuery实现类似百度智能搜索框

最近再学习ajax,上课老师让我们实现一个类似百度首页实现搜索框的功能,刚开始做的时候没有一点头绪,查阅大量网上的资源后,发现之前的与我们现在的有些区别,所以在此写出来,希望能对大家有所帮助. 下面先展示下效果图:(ps:图片中的文字是参考的,不具有任何的攻击意义) 项目的目录结构: 一:首先是login.jsp页面 需要注意的是我是通过js的类库(Jquery)封装的ajax,需要在webcontent下面导入jquery jar包,代码如下: <%@ page language="ja

Jquery实现类似百度的搜索框

最近工作中需要做一个搜索框,类似百度的搜索框,需要达到两个功能: 1.输入关键字,展示匹配的下拉列表 2.选择匹配的项后查出相关内容 一般电商网站中也经常用到该搜索条,首先分析功能实现,输入关键字马上显示匹配项列表,实现该功能输入框需要绑定"input"事件,然后向后台发送异步请求,将数据展示在页面上.使用鼠标或上下键选择匹配项,点击搜索或"Enter"键后搜索具体结果.这里要用到两个异步请求,第一个请求匹配项,第二个请求搜索结果.键盘,鼠标以及输入框的事件都要监听

PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))

PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robbe.html i.  Robbe完整版本下载:Robbe完整版本(PHP测试程序, 开发帮助文档, WinNT下php各版本的dll文件)下载: http://code.google.com/p/robbe(“谷歌”无法使用) b) SCWS(简易中文分词) 基于HTTP/POST的分词 : htt

百度智能搜索框模拟(原创)

<input id="testID" type="text"/> <ul id="test1"> </ul> <script src="http://code.jquery.com/jquery-latest.js"></script> <script > var queryURL="http://suggestion.baidu.com/su?

js 百度云搜索框

// ==UserScript==// @name 百度云插件+APIKey// @namespace // @version 5.0.2.1// @description 在百度云网盘的页面添加一个搜索框,调用搜索API搜索所有公开分享文件// To add a search frame that calls some api for searching some public shared files in BaiduYun cloud netdisk. // @include /https

如何制作一个必应(百度)搜索框?

代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <meta charset="UTF-8"> <title>Document</title> <style type="text/css">     *{         margin:0

Ajax 连接数据库实现类似百度搜索功能

1.Html代码部分 <!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> <meta http-equiv=&qu

类似百度首页搜索静态图

1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <title></title> 6 <link href="css/d

javascript弹出带文字信息的提示框效果

// position of the tooltip relative to the mouse in pixel // <html><head><meta charset="utf-8"><style>.tableBorder7{width:800;solid; background-color: #000000;}TD{font-family: 宋体;font-size: 12px;line-height : 15px ;}th{ba