电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Ajax實現關鍵字聯想和自動補全功能及遇到坑

瀏覽:203日期:2022-06-12 09:05:28
目錄
  • 遇到的小坑
  • 代碼實現
    • 前端代碼
    • 后端代碼
    • 用到的實體類
    • 自己封裝的jdbc工具類
    • 數據庫表:
    • 效果展示:

遇到的小坑

  • 回調函數相對window.onload的擺放位置
  • 給回調函數addData傳數據時,如何操作才能將數據傳進去

代碼實現

前端代碼

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>ajax實現關鍵字聯想和自動補全</title>    <style>*{    margin: 0;    padding: 0;    box-sizing: border-box;}#keyWords{    margin-top: 10px;    margin-left: 10px;    width: 300px;    height: 25px;    font-size: 20px;    padding-left: 5px;}#dataDiv{    background-color: wheat;    width: 300px;    margin-left: 10px;    display: none;}#dataDiv p{    padding-left: 10px;    padding-top: 7px;    padding-bottom: 3px;    cursor: pointer;}#dataDiv p:hover{    background-color: cornflowerblue;    color: white;}    </style></head><body>    <!--需求:    1. 給定文本輸入框,顯示層,顯示層里的顯示欄    2. 當用戶在文本框里輸入數據時,發生keyup事件時,將文本框里的數據,以ajax請求方式提交的到后端    3. 后端對前端提交的關鍵字,在數據庫里進行模糊查詢    4. 將后端查詢到的數據以json格式傳給前端    5. 前端解析后端傳來的數據,將數據顯示在提示欄里    6. 當用戶點擊提示中的某條提示信息時,將提示欄里的信息賦給輸入框,隱藏提示層    注意:1. 凡是輸入框里發生keyup事件時,都要進行ajax請求提交,實時獲取提示信息 2. 輸入框信息為空時,也要隱藏提示層    -->    <script>window.onload = function (){    //獲取dom對象    input_txt = document.getElementById("keyWords")    div_data = document.getElementById("dataDiv")    //為輸入框綁定keyup事件    input_txt.onkeyup = function (){//輸入框為空,隱藏提示層if(this.value.trim() == ""){    div_data.style.display = "none"}else{    //每當keyup時,發送ajax請求,傳遞文本框內數據    var xmlHttpRequest = new XMLHttpRequest();    xmlHttpRequest.onreadystatechange = function (){if(this.readyState == 4){    if(this.status == 200){//解析后端傳來的json數據:[{"content" : "data"}, {}, {}]var jsonArray = JSON.parse(this.responseText)var html = ""for(var i = 0; i < jsonArray.length; i++){    var perData = jsonArray[i].content    //為p標簽綁定單擊事件,將數據以字符串的形式傳給回調函數    html += "<p onclick="addData(\""+perData+"\")">"+perData+"</p>"}div_data.innerHTML = htmldiv_data.style.display = "block"    }else{alert("異常狀態碼: " + this.status)    }}    }    xmlHttpRequest.open("GET", "/ajax/ajaxAutoComplete?keyWords="+this.value+"", true)    xmlHttpRequest.send()}    }}function addData(perData){    //完成自動補全    input_txt.value= perData    //隱藏提示層    div_data.style.display = "none"}    </script>    <input type="text" id="keyWords">    <div id="dataDiv"><!--<p>java</p><p>jsp</p><p>service</p><p>servlet</p><p>docker</p><p>linux</p>-->    </div></body></html>

后端代碼

package com.examples.ajax.servlet;import com.alibaba.fastjson.JSON;import com.examples.ajax.beans.KeyWords;import com.examples.ajax.utils.DBUtils;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;@WebServlet("/ajaxAutoComplete")public class AjaxRequest13 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {//獲取前端傳來的關鍵字String keyWords = request.getParameter("keyWords");//連接數據庫,進行模糊查詢Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//封裝關鍵字對象List<KeyWords> keyWordsList = new ArrayList<>();try {    conn = DBUtils.getConnection();    String sql = "select content from tb_search where content like ?";    ps = conn.prepareStatement(sql);    ps.setString(1, keyWords + "%");    rs = ps.executeQuery();    while(rs.next()){String content = rs.getString("content");//封裝成關鍵字對象KeyWords keyWordsObj = new KeyWords(content);//將關鍵字對象封裝keyWordsList.add(keyWordsObj);    }} catch (SQLException e) {    throw new RuntimeException(e);}finally {    DBUtils.close(conn, ps, rs);}//后端數據json化String jsonKeyWordsArray = JSON.toJSONString(keyWordsList);//返回后端數據response.getWriter().write(jsonKeyWordsArray);    }}

用到的實體類

package com.examples.ajax.beans;public class KeyWords {    private String content;    public KeyWords() {    }    public KeyWords(String content) {this.content = content;    }    public String getContent() {return content;    }    public void setContent(String content) {this.content = content;    }}

自己封裝的jdbc工具類

package com.examples.ajax.utils;import java.sql.*;import java.util.ResourceBundle;/** * 封裝自己的jdbc工具類 */public class DBUtils {    static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");    static String driver;    static String url;    static  String username;    static  String password;    static {driver = bundle.getString("driver");url = bundle.getString("url");username = bundle.getString("username");password = bundle.getString("password");try {    Class.forName(driver);} catch (ClassNotFoundException e) {    throw new RuntimeException(e);}    }    private DBUtils(){}    public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, username, password);    }    public static void close(Connection conn, PreparedStatement ps, ResultSet rs){if(rs != null){    try {rs.close();    } catch (SQLException e) {throw new RuntimeException(e);    }}if(ps != null){    try {ps.close();    } catch (SQLException e) {throw new RuntimeException(e);    }}if(conn != null){    try {conn.close();    } catch (SQLException e) {throw new RuntimeException(e);    }}    }}

數據庫表:

一張表: tb_search
數據表描述: 除了id, 就一個字段 content varchar(255) not null

效果展示:

自己在遠程數據庫上用docker運行了一個mysql數據庫,查詢速度比較慢,但演示關鍵字聯想和自動補全功能的測試目的已經達到

到此這篇關于Ajax實現關鍵字聯想和自動補全功能的文章就介紹到這了,更多相關ajax關鍵字自動補全內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Ajax
主站蜘蛛池模板: 商秀—企业短视频代运营_抖音企业号托管 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 引领中高档酒店加盟_含舍·美素酒店品牌官网 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 工业制氮机_psa制氮机厂家-宏骁智能装备科技江苏有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 517瓜水果特产网|一个专注特产好物的网站 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 |