五月开心播播网_国内精品伊人久久久久影院对白_亚洲精品高清视频_国产精品激情_68精品久久久久久欧美_四虎免费av_97精品在线视频_欧美知名女优

您的位置:首頁技術(shù)文章
文章詳情頁

Ajax實現(xiàn)關(guān)鍵字聯(lián)想和自動補(bǔ)全功能及遇到坑

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

遇到的小坑

  • 回調(diào)函數(shù)相對window.onload的擺放位置
  • 給回調(diào)函數(shù)addData傳數(shù)據(jù)時,如何操作才能將數(shù)據(jù)傳進(jìn)去

代碼實現(xiàn)

前端代碼

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>ajax實現(xiàn)關(guān)鍵字聯(lián)想和自動補(bǔ)全</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. 當(dāng)用戶在文本框里輸入數(shù)據(jù)時,發(fā)生keyup事件時,將文本框里的數(shù)據(jù),以ajax請求方式提交的到后端    3. 后端對前端提交的關(guān)鍵字,在數(shù)據(jù)庫里進(jìn)行模糊查詢    4. 將后端查詢到的數(shù)據(jù)以json格式傳給前端    5. 前端解析后端傳來的數(shù)據(jù),將數(shù)據(jù)顯示在提示欄里    6. 當(dāng)用戶點擊提示中的某條提示信息時,將提示欄里的信息賦給輸入框,隱藏提示層    注意:1. 凡是輸入框里發(fā)生keyup事件時,都要進(jìn)行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{    //每當(dāng)keyup時,發(fā)送ajax請求,傳遞文本框內(nèi)數(shù)據(jù)    var xmlHttpRequest = new XMLHttpRequest();    xmlHttpRequest.onreadystatechange = function (){if(this.readyState == 4){    if(this.status == 200){//解析后端傳來的json數(shù)據(jù):[{"content" : "data"}, {}, {}]var jsonArray = JSON.parse(this.responseText)var html = ""for(var i = 0; i < jsonArray.length; i++){    var perData = jsonArray[i].content    //為p標(biāo)簽綁定單擊事件,將數(shù)據(jù)以字符串的形式傳給回調(diào)函數(shù)    html += "<p onclick="addData(\""+perData+"\")">"+perData+"</p>"}div_data.innerHTML = htmldiv_data.style.display = "block"    }else{alert("異常狀態(tài)碼: " + this.status)    }}    }    xmlHttpRequest.open("GET", "/ajax/ajaxAutoComplete?keyWords="+this.value+"", true)    xmlHttpRequest.send()}    }}function addData(perData){    //完成自動補(bǔ)全    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 {//獲取前端傳來的關(guān)鍵字String keyWords = request.getParameter("keyWords");//連接數(shù)據(jù)庫,進(jìn)行模糊查詢Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//封裝關(guān)鍵字對象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");//封裝成關(guān)鍵字對象KeyWords keyWordsObj = new KeyWords(content);//將關(guān)鍵字對象封裝keyWordsList.add(keyWordsObj);    }} catch (SQLException e) {    throw new RuntimeException(e);}finally {    DBUtils.close(conn, ps, rs);}//后端數(shù)據(jù)json化String jsonKeyWordsArray = JSON.toJSONString(keyWordsList);//返回后端數(shù)據(jù)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);    }}    }}

數(shù)據(jù)庫表:

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

效果展示:

自己在遠(yuǎn)程數(shù)據(jù)庫上用docker運(yùn)行了一個mysql數(shù)據(jù)庫,查詢速度比較慢,但演示關(guān)鍵字聯(lián)想和自動補(bǔ)全功能的測試目的已經(jīng)達(dá)到

到此這篇關(guān)于Ajax實現(xiàn)關(guān)鍵字聯(lián)想和自動補(bǔ)全功能的文章就介紹到這了,更多相關(guān)ajax關(guān)鍵字自動補(bǔ)全內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: Ajax
91精品国产91久久久久久青草| 88av.com| 91精品国产一区二区三区香蕉| 秋霞影院一区二区| 国产综合av| 日本1区2区| 亚洲三级中文字幕| 国产成人自拍网站| 干日本少妇首页| 国产精品日韩二区| 欧美肥婆姓交大片| 激情成人中文字幕| 成人涩涩免费视频| 好看的日韩av电影| 网站一区二区| 岛国片av在线| 无限国产资源| 欧美性xxxxxbbbbbb精品| 九九热国产视频| 国产草草浮力影院| 波多野结衣综合网| 精品中文字幕人| 日韩av免费在线播放| 中中文字幕av在线| www.91popny.com| 99热这里只有精品在线| 亚洲成人黄色av| 无码人妻丰满熟妇区毛片18| 欧美一区二区在线视频观看| 国产精品久久中文| 久久综合九色九九| 亚洲黄色在线观看| 在线亚洲欧美专区二区| 中文字幕欧美一| 国产一区免费电影| 国产欧美精品久久| 91视频综合| 日韩精品亚洲aⅴ在线影院| 成人精品国产亚洲| 天堂av在线电影| 国产玉足榨精视频在线观看| av免费在线电影| 久久久免费网站| 久久黄色一级视频| 国产成人永久免费视频| 欧美日韩高清免费| 国产高清精品一区| 国产精品综合网站| 国产精品久久久久久久av电影| 欧美激情亚洲精品| 久久女同精品一区二区| 亚洲一区二区成人| 欧美涩涩视频| 欧美阿v一级看视频| 四季av在线一区二区三区| 国产66精品| 综合久久成人| 国产一区二区三区| 不卡的国产精品| 欧美韩国日本| 福利一区二区免费视频| 成人午夜毛片| 色婷婷.com| 亚洲天堂影视av| 欧美一区二区三区四区在线观看 | 亚洲精品国久久99热| 欧美激情综合网| 久久久精品tv| 中文字幕av不卡| 国产真实乱子伦精品视频| 青青青爽久久午夜综合久久午夜| 日韩极品在线观看| 韩国视频一区二区| 成人免费视频视频| 成人免费av在线| 日本一区二区综合亚洲| 1024成人网| 中文字幕日本视频| 黄色激情小视频| 久久噜噜色综合一区二区| 美女福利视频在线观看| 欧美一二三区视频| 国产又粗又猛又黄又爽| 免费观看黄一级视频| 神马久久久久久久久久久| 国内性生活视频| 日韩精品一区二区三区色欲av| 九色porny自拍| 国产肉体xxxx裸体784大胆| 中文天堂资源在线| 在线观看黄网站| 成人小说亚洲一区二区三区| 精品人妻在线播放| 黄网在线观看视频| 91九色蝌蚪91por成人| 亚洲色图偷拍自拍| 羞羞网站在线观看| 日本免费视频www| p色视频免费在线观看| 无码小电影在线观看网站免费| 伊人精品综合| 永久亚洲成a人片777777| 麻豆精品精品国产自在97香蕉| 91丨porny丨国产| 精品日韩视频在线观看| 精品处破学生在线二十三| 久久国产精品99国产精| 亚洲一区二区三区在线免费观看| 亚洲精品一区二区三| 一区二区三区入口| 久久久久久久9| 亚洲国产欧美日韩在线| 午夜免费激情视频| www.污视频| 猫咪成人官网| 性欧美video高清bbw| 粉嫩一区二区三区四区公司1| 亚洲激情欧美| 亚洲国产成人自拍| 91精品国产高清一区二区三区蜜臀| 另类色图亚洲色图| 精品欧美一区二区在线观看视频| 99久久久无码国产精品6| 国产 欧美 在线| 中文字字幕在线观看| 免费看黄资源大全高清| 超碰porn在线| 精品美女视频| 欧美日韩色图| 国产在线观看免费一区| 欧美日韩激情网| 欧美成人激情在线| 久久精品最新地址| 91香蕉电影院| 国产淫片av片久久久久久| 91大神福利视频| 天天操天天爱天天干| 亚洲av色香蕉一区二区三区| 变态黄色小视频网站| 99thz桃花论族在线播放| 婷婷综合在线| 久久女同精品一区二区| 亚洲摸下面视频| 国产精品一区二区av| 韩国三级在线看| 性做久久久久久久| 国产午夜视频在线观看| 日韩在线观看中文字幕| 狠狠色狠狠色综合| 欧美日韩电影在线| 国产日韩av在线播放| 少妇黄色一级片| 亚洲无码精品一区二区三区| 中文字幕2019第三页| 四虎影视国产精品| 久久精品二区亚洲w码| 欧美日韩一区在线| 又黄又色的网站| 日韩欧美一区视频| 久热99视频在线观看| 99爱在线观看| 免费看日批视频| av电影不卡在线观看| 黄色成人免费网| 日韩va亚洲va欧美va久久| 在线观看免费亚洲| 成人在线中文字幕| 国内精品免费视频| 中文字幕专区| 五月天av在线| 国产一区在线观看视频| 欧美成人高清电影在线| 免费国产在线精品一区二区三区| 波多野吉衣中文字幕| 国产丝袜控视频在线观看| 欧美电影网址| 国产成人激情av| 最近免费中文字幕视频2019| 青青草免费在线视频观看| 老熟妇仑乱一区二区av| 中文字幕不卡| 欧美激情第二页| 91国偷自产一区二区三区观看 | 亚洲国产精品久久久久| 日韩精品久久久| 亚洲综合图片网| 激情在线视频| 噜噜噜躁狠狠躁狠狠精品视频| 欧美精品一区二区高清在线观看| 亚洲免费视频播放| 国产精品久久久久久在线| 成人高清免费在线| 国产一区二区三区四| 日韩在线观看成人| 中文字幕视频三区| 国产字幕在线看| 一区二区三区四区高清视频| 影视先锋av在线| 青青草在线观看视频| 美女激情网站|