node+express+jQuery+ajax+template+mysql制作搜索框提示功能

news/2024/7/10 22:49:25 标签: ajax, jquery, javascript, node.js, mysql

一、实现效果

search

二、核心知识点

1. node+express实现提示功能接口

mysql模拟数据:
<a class=mysql" />
接口测试:
测试
路由:

javascript">const express = require('express')
const router = express.Router()
const routerHandler = require('../router_handler/search')

// 搜索框提示历史记录
router.get('/history/searchinfo', (req, res) => {
        const sqlstr = 'select history from ev_history where history like ?'
        let content = ["%" + req.query.searchVal + "%"];
        // console.log(content);
        db.query(sqlstr, content, (err, results) => {
            if (err) return res.send(err)
                // console.log(typeof(results));
            res.send(results)
        })

    })

module.exports = router

入口函数app.js

javascript">const express = require('express')
const app = express()
const path = require('path')
    // 配置跨域
const cors = require('cors')
app.use(cors())

// 导入搜索路由
const searchrouter = require('./router/search')
app.use('/', searchrouter)

app.use(express.static(path.resolve(__dirname, "./")));

app.listen(8089, () => {
    console.log('services running at http://127.0.0.1:8089');
})

ajax_53">2. $.ajax调用接口

javascript">   // 获取历史记录函数
    function gethistoryInfo(searchVal1) {
        console.log(1);
        $.ajax({
            type: 'get',
            url: 'http://127.0.0.1:8089/history/searchinfo',
            data: {
                searchVal: searchVal1,
            },
            success: (data) => {
             //使用template模板
                let html = template('historyinfo', {
                    list: data
                })

                $('.searchhistory ul').html(html)

            }
        })

3. template.js模块使用

引入文件

javascript">//引入js文件
  <script src="./js/template-web.js"></script>

构建模板:

javascript">   <!-- 搜索模板 -->
    <script id='historyinfo' type='text/html'>
        <!-- 循环生成li列表 -->
        {{each list}}
        <li>{{$value.history}}</li>
        {{/each}}
    </script>

使用模板:

javascript">         let html = template('historyinfo', {
                    list: data
                })

         $('.searchhistory ul').html(html)

ajaxonblurli_108">4. 输入框触发oninput与onfocus事件执行ajax响应数据、onblur时隐藏提示栏并且清除标签li

这里有个知识点是onblur事件比onclick事件更早触发,onblur>onclick,所以将onblur加了一个延迟

javascript">  // 点击提示记录,更新input输入内容
    $("#searchinput ul").on('click', 'li', function() {
            console.log(1);
            // console.log($(this).text());
            let content = $(this).text();
            $('#searchinput input').val(content)
        }) 

$('#searchinput input').on({
        'input focus': function() {
            // console.log(1);
            let searchVal = $(this).val();
            // console.log(searchVal);

            clearTimeout(timer)
                // console.log(html);
            if (searchVal.length === 0) {
                $(".searchhistory").hide()
                $('.searchhistory ul li').remove()
            } else {
                $(".searchhistory").show();
                timer = setTimeout(() => { gethistoryInfo(searchVal) }, 500)

            }
        },
        // 失去焦点
        'blur': function() {
            setTimeout(() => {
                $(".searchhistory").hide()
                    // 移除li标签
                $('.searchhistory ul li').remove()
            }, 100);
        }


    })

5、防抖

防抖
每次输入都会发送请求,频率太高,这里做了一个防抖,每次触发oninputonfocus事件使用延时发送请求:

javascript">//每次触发事件开始就清除一次计时器
 clearTimeout(timer)

//延时500ms
timer = setTimeout(() => { gethistoryInfo(searchVal) }, 500)

总结:后端接口使用node+express制作,使用cors()做了跨域,使用mysql模拟数据,其实也可以用百度搜索提示的接口,前端使用ajax来响应数据,template.js模板渲染数据


http://www.niftyadmin.cn/n/1579571.html

相关文章

ubuntu12.04 搭建zend framework

完成apache2服务器按转后&#xff0c;在浏览器输入http://localhost可以访问到相应主页&#xff0c;但是装完phpmyadmin后&#xff0c;使用http://localhost/phpmyadmin却出现page not found的提示。这个原因是phpmyadmin没有与apache2服务器进行关联&#xff0c;此时使用sudo …

Node+Expres+jQuery+Ajax+Mysql+Template+Bootstrap.select制作 省-城市-县城三级联动功能

一、实现效果 二、核心点 1. nodeexpressmysql制作后端接口 mysql模拟数据&#xff1a; 中国城市sql可以自行从网上获取 测试接口&#xff1a; 1、获取省份接口&#xff1a; 2、根据省份获取对应城市接口&#xff1a; 3、根据城市获取县城区域接口&#xff1a; 入口app.j…

使用Vue制作todoList实现增删改

一、实现样式 二、文档结构 三、核心点 todos分为外面整体的App.vue&#xff0c;里面包含todoHeader.vue、List.vue>Item.vue、TodoFooter.vue 采用localStorage本地存储&#xff0c;对数据todos进行深度监视watch&#xff0c;只要数据一改变&#xff0c;就对localStorage本…

关于手机端JQuery的使用心得

1。 如何在台式机上模拟手机显示效果&#xff1f; 为了在台式机上模拟手机的效果&#xff0c;建议使用opera或者chrome浏览器。 很多网站都通过User-Agent来判断浏览器类型&#xff0c;如果是3G手机&#xff0c;显示手机页面内容&#xff0c;如果是普通浏览器&#xff0c;显示普…

VMware 创建虚拟机的磁盘操作

VMware的磁盘可以挂在在两种总线下&#xff1a;IDE&#xff0c;SCSI。IDE总线的速度比较慢&#xff0c;但是价格低廉。一般的pc机都会采用IDE总线。&#xff08;感觉目前的pc都采用sata总线。和IDE的并行相比&#xff0c;串行通信的sata速度更快&#xff0c;占用更少的线路&…

进程和线程的区别(重点)

来源&#xff1a;http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程&#xff0c;使得多线程程序的并发性高。另外&#xff0c;进程在执行过程中拥有独立的内存单元&#xff0c;而…

我对云计算的简单了解

云的概念就是向我们提供服务&#xff0c;而我们不需要关心这种服务的架构或者技术实现有多么复杂&#xff0c;我们只需要根据服务商提供的接口使用自己需要的服务&#xff0c;云计算给我们带来了更低的成本支出&#xff0c;比如&#xff1a;一个企业他们可以将自己的互联网服务…

随记之oracle查询某字段某几位的条件 substr

数据库中想要查询 前两位是XX的数据 "select * from tablename where substr(ziduan,1,2)XX" ;ziduan为字段名&#xff0c;substr获取该字段 从第1位开始共2位的的字符转载于:https://www.cnblogs.com/bobogoodgoodstudy/archive/2013/04/19/3030216.html