日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:356日期: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
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲ww精品| 91精品1区| 国产福利一区二区三区在线播放| 国产不卡精品在线| 亚洲一区不卡| 美女尤物久久精品| 日韩免费精品| 亚洲乱亚洲高清| 蜜桃免费网站一区二区三区| 蜜桃视频一区二区| 中文字幕av一区二区三区四区| 亚洲精品99| 中文字幕在线看片| 国产一区二区精品久| 美女精品视频在线| 麻豆精品久久久| 深夜福利视频一区二区| 亚洲精品1区2区| 久久精品青草| 中文精品视频| 麻豆传媒一区二区三区| 超碰超碰人人人人精品| 国产v日韩v欧美v| 欧美极品中文字幕| 视频二区不卡| 涩涩涩久久久成人精品| 四虎精品一区二区免费| 久久久久亚洲精品中文字幕| 一本一道久久a久久精品蜜桃| 色黄视频在线观看| 日本大胆欧美人术艺术动态| 乱人伦精品视频在线观看| 亚洲3区在线| 精品一区二区三区亚洲| av亚洲免费| 日韩av网站在线观看| yellow在线观看网址| 久久激情婷婷| 国产色99精品9i| 欧美午夜不卡影院在线观看完整版免费| 午夜国产一区二区| 欧美亚洲tv| 欧美一级精品| 欧美精品中文字幕亚洲专区| 精品三级在线观看视频| 日韩va亚洲va欧美va久久| 久久久久久免费视频| 久久精品理论片| 丝袜美腿亚洲色图| 另类综合日韩欧美亚洲| 免费在线视频一区| 亚洲一区二区动漫| 国产精品蜜月aⅴ在线| 99国产精品久久久久久久| 久久中文精品| 日韩一区网站| 爽好多水快深点欧美视频| 日韩国产专区| 日韩黄色免费网站| 欧美天堂亚洲电影院在线观看| 欧美日韩一二三四| 国产一区二区三区久久 | 日韩免费高清| 亚洲aⅴ网站| 中文字幕av一区二区三区人| 乱人伦精品视频在线观看| 国产中文一区| 日韩电影免费网站| 99精品99| 每日更新成人在线视频| 成人久久一区| 国产传媒av在线| 国产精品日本一区二区不卡视频| 日韩国产欧美在线播放| 久久91视频| 福利一区二区三区视频在线观看| 国产一区二区久久久久| 国产专区一区| 爽好多水快深点欧美视频| 美女久久一区| 97久久精品| 精品国产午夜肉伦伦影院| zzzwww在线看片免费| 日本久久一区| 精品午夜久久| 91精品啪在线观看国产18| 欧美羞羞视频| 国产视频久久| 老鸭窝一区二区久久精品| 97精品中文字幕| 欧美日韩视频| 日韩精品欧美成人高清一区二区| 亚洲精品字幕| 日韩成人精品一区二区| 91精品高清| 亚洲精品系列| 中文字幕高清在线播放| 亚洲欧美日韩国产综合精品二区| 国产日韩一区二区三免费高清 | 国产伊人精品| 91成人在线| 国产 日韩 欧美一区| 视频一区中文字幕精品| 日韩欧美国产精品综合嫩v| 日韩高清成人| 中文字幕av一区二区三区人| 九一国产精品| 国产精品www994| 亚洲欧美日韩国产一区二区| 国产精品一区二区99| 亚洲免费播放| 狂野欧美性猛交xxxx| 久久青草久久| 日韩av影院| 亚洲色诱最新| 国产精品av一区二区| 婷婷综合国产| 久久亚洲美女| 久久久久久久久99精品大| 香蕉久久夜色精品国产| 亚洲大片在线| 激情五月综合| 动漫av一区| 久久中文字幕导航| 精品五月天堂| 偷拍亚洲精品| 中文字幕亚洲精品乱码| 国产一区二区中文| 亚洲涩涩在线| 日韩中文影院| 国产91欧美| 日韩免费福利视频| 成人精品中文字幕| 欧美91视频| 国产午夜久久| 久久亚洲美女| 亚洲综合婷婷| 亚洲欧美在线综合| 91成人小视频| 精品香蕉视频| 欧美a级片一区| 视频一区视频二区中文字幕| 视频在线在亚洲| 蜜臀精品久久久久久蜜臀| 亚洲自啪免费| 日韩欧美在线精品| 日韩1区2区日韩1区2区| 免费在线观看一区| 日韩精品永久网址| 色天使综合视频| 在线亚洲激情| 国产精品网站在线看| 国产精品一区二区三区四区在线观看 | 欧美精品日日操| 红桃视频亚洲| 蜜臀久久久99精品久久久久久| 日本免费在线视频不卡一不卡二| 国产精品mm| 另类专区亚洲| 蜜桃视频在线观看一区二区| 精品一区二区三区中文字幕| 国内精品伊人| 亚洲欧美日韩国产一区二区| 麻豆91在线播放| 国产成人精品一区二区免费看京 | 国产精品亚洲综合久久| 高潮一区二区| 日韩欧美2区| 高清不卡一区| 日本免费在线视频不卡一不卡二| www在线观看黄色| 午夜在线一区二区| 国产夫妻在线| 国产精品久久久久久久久久齐齐 | 欧美日韩一区二区国产| 亚洲精品电影| 国产一区二区三区四区五区传媒| 免费在线观看一区二区三区| 亚洲二区免费| 亚洲最新无码中文字幕久久| 免费视频一区二区三区在线观看| 91精品二区| 91久久在线| 一区二区三区视频免费观看| 狠狠久久伊人中文字幕| 国产精品嫩草影院在线看| 久久久国产亚洲精品| 国语精品一区| 国产精品探花在线观看| 日韩一区网站| 热久久免费视频| 国产一级一区二区| 午夜视频精品| 超碰在线99| 日韩中文首页| 1024精品久久久久久久久| 欧美精品一二| 亚洲一区欧美二区| 玖玖精品视频| 青青伊人久久|