网络编程
位置:首页>> 网络编程>> JavaScript>> Ajax实现搜索框提示功能

Ajax实现搜索框提示功能

作者:農碼一生  发布时间:2023-09-11 20:51:21 

标签:Ajax,搜索框,提示,功能

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>搜索框输入文字自动提示</title>
   <link rel="stylesheet"  href="./assets/bootstrap/dist/css/bootstrap.min.css" rel="external nofollow" />
   <style type='text/css'>
       .list-group{
           display: none;
       }
       .container{
           padding-top: 150px;
       }
    </style>
</head>
<body>
   <div class='container'>
       <div class="form-group">
           <input type="text" class="form-control" placeholder="请输入搜索的关键字" id="search"/>
           <ul class="list-group"  id="list-box">
               <!-- <li class="list-group-item">提示文显示的地方</li> -->
           </ul>
       </div>
   </div>
   <script src="./js/ajax.js"> </script>
   <script src="./js/template-web.js"></script>
   <script type="text/html" id="tpl">
       {{ each result }}
       <li class="list-group-item">{{$value}}</li>
       {{/each}}
   </script>
   <script>
       //获取搜索框
       var searchInput=document.getElementById('search');
       //获取提示文字的存放问起
       var listBox=document.getElementById('list-box');
       //存储定时器的变量
       var timer =null;
       //输入框输入触发事件,并清除防抖/节流
       searchInput.oninput=function(){
           //清除上一次开启的定时器
           clearTimeout(timer);
           //获取用户输入的内容
           var key= this.value;
           //如果没有在搜索框输入内容
           if(key.trim().length==0){
               //将提示下拉信息隐藏
               listBox.style.display='none';
               //阻止程式向下执行
               return;
           }

//开启定时器,让请求延迟发送
           timer = setTimeout(
               function(){
            //向服务器发送请求
          ajax({
              type:'get',
              url:'http://localhost:3000/searchAutoPrompt',
              data:{
                  key: key
              },
              success:function(result){
               console.log(result);
                  //使用模板引擎拼接字符串
                 var html= template('tpl',{result:result});//获取的result为数组
                 //拼接好的字符串显示在页面
                 listBox.innerHTML=html;
                 console.log(html);
                 //显示ul容器
                 listBox.style.display='block';
              }
          });
            },800 );
       }
   </script>
</body>

</html>

Ajax封装方法:

function ajax(options){

//定义默认
   var defaults ={
       type:'get',
       url:'',
       data:{},
       Headers:{'Content-Type': 'application/x-www-form-urlencoded'},
       success:function(){},
       error:function(){}
   };
   //用options中的对象覆盖defaults中对象
   Object.assign(defaults,options);
   //创建
   var xhr= new XMLHttpRequest();
   //拼接请求参数变量
   var params='';
   //循环用户传递进来的对象格式参数
   for(var attr in defaults.data){
       //将参数转换成字符串格式
       params+= attr +'='+ defaults.data[attr] +'&';
   }
   //字符串截取,将最后的&截取掉
   params= params.substr(0,params.length -1);

//判断请求方式
   if(defaults.type=='get'){
       defaults.url=defaults.url +'?'+ params;
   }

//配置
   xhr.open(defaults.type,defaults.url);
   //发送请求
   if(defaults.type=='post'){
       //用户期望的向服务端传递的请求参数类型
       var contentType=defaults.Headers['Content-Type'];
       //post请求时必须设置的
       xhr.setRequestHeader('Content-Type',contentType);
       //判断请求参数类型
       if(contentType=='application/json'){
           xhr.send(JSON.stringify(defaults.data));
       }else{
           xhr.send(JSON.stringify(params));
       }

}else{                
       xhr.send();
   }

//监听onload事件,当接收完响应数据后触发
   xhr.onload=function(){
   //xhr.getResponseHeader()
   //获取响应头部数据
   var contentType=xhr.getResponseHeader('Content-Type');
   //服务端返回的数据
   var responseText=xhr.responseText;
   if(contentType.includes('application/json')){
       //把JSON字符串转换为JSON 对象
       responseText = JSON.parse(responseText);
   }

//对http状态码判断,判断是否等于200
   if(xhr.status==200){
       //调用处理成功情况的函数
       defaults.success(responseText,xhr);
   }else{
       //调用处理失败的情况函数
       defaults.error(responseText,xhr);
   }      

}
}

服务器端测试代码:

/**** server.js ****/
// 一个简单的后端路由

//1.引入express框架
const express=require('express');

const fs=require('fs');

//2.引入路径处理模块
const path=require('path');
const bodyParser=require('body-parser');//post

//3.创建web服务器
const app=express();

//post
//extended:返回的对象是一个键值对,当extended为false的时候,键值对中的值就为'String'或'Array'形式,为true的时候,则可为任何数据类型。
//解析urlencoded
app.use(bodyParser.urlencoded({extended: false}));
//解析json
app.use(bodyParser.json());

//4.静态资源访问服务器功能
app.use(express.static(path.join(__dirname,'public')));

//5.配置路由 request 请求   response 响应,回应
//get路由 ,对应12.html
app.get('/searchAutoPrompt',(request,response)=>{
   //响应
   const key = request.query.key;
   var result=["无匹配内容"];
if (key == "合肥") {
       result=['合肥蜀山区','合肥瑶海区','合肥肥西','合肥肥东','合肥新站区'];
response.send(result)
} else if(key == "阜阳") {
       result=['阜阳市阜南县','阜阳卷膜','阜阳火车站','阜阳格拉条'];
response.send(result)
}else {
       response.send(result)
   }  
});

//6.监听端口,进行回调
app.listen(3000,(err)=>{
   // 函数体
   if(!err) {
       console.log('测试ajax请求的服务器开启成功了!');
       console.log('正在监听3000端口...........');
   }
});

来源:https://www.cnblogs.com/wml-it/p/15809251.html

0
投稿

猜你喜欢

  • 如何利用Image Data Type从数据库中读取图片,并在主页中显示图形?然后,写如下代码:< % @&nbs
  • 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的
  •     Check In/Out功能简介:该功能是专门针对多用户管理而预设的。即多用户使用多帐号管理同一站点。
  • 在后台处理数据时,前台页面同时计数显示进度条Proess Bar使用了layer来显示用法:1。引用<script lang
  • 确定数据库内有多少记录,或者确定有多少记录达到了某些标准,这些用ASP完成并非难事。如果你采用了正确的游标类型,你可以用RecordCoun
  • 下拉菜单平常见到的都是用js来实现的,本文介绍的方法是使用纯CSS实现导航下拉菜单功能,代码符合标准,兼容性好且环保,制作下拉菜单的不错选择
  • 代码如下:arr = array(12,52,14,43,24,58,15,64,24,57,17,56,45)&nbs
  • 本文实例为大家分享了python可视化动态CPU性能监控的具体代码,供大家参考,具体内容如下打算开发web性能监控,以后会去学js,现在用m
  • 在Google上搜一下,可以发现一大堆对ASP不好的评价,什么运行速度慢、异常处理机制不好、缺乏面向对象机制、开发效率低、漏洞多等等。为了让
  •     Dreamweaver MX 2004的强大功能以及更加完善的人性化设置已经深受大家喜爱。在此笔者就谈
  • 本文实例为大家分享了JS实现拖动模糊框特效的具体代码,供大家参考,具体内容如下需求:在图片上拖动按钮,图片蒙层慢慢覆盖,当蒙层边缘碰到左右下
  • asp连接mysql的问题ASP连接Mysql数据库的问题。下了一个MySql 的ODBC驱动。做了个小测试。顺利通过。先记录下来,中间还有
  • 异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET St
  • 什么是Css Hack?由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla
  • 半透明效果有时候会给页面增加不少色彩,特别是Vista盛行之后,半透明效果更加受推崇。在诸多可用于Web浏览的图片格式中,只有PNG格式和G
  • 块级元素块级元素生成一个元素框,(默认地)它会填充其父级元素的内容,旁边不能有其他元素。换句话说,他在元素框之前和之后生成了“分隔”符。我们
  • 异步编程一直是JavaScript 编程的重大事项。关于异步方案, ES6 先是出现了 基于状态管理的 Promise,然后出现了 Gene
  • 这几个技术都不是很新了,现在还拿出来说也就是为了教教新手了呵呵,各位大虾多多指正.css之所以出现就是为了实现数据与数据的表现形式的分离,
  • SQL Server数据库快捷键:书签:清除所有书签。 CTRL-SHIFT-F2书签:插入或删除书签(切换)。 CTRL+F2书签:移动到
  • 我用FSO生成了unicode的文件,但这不是我想要的。FSO可以生成utf-8格式编码的html文件吗?用什么办法才能生成?FSO的编码问
手机版 网络编程 asp之家 www.aspxhome.com