<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
<!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 = html div_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; } }
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關鍵字自動補全內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45