ajax實現輸入時的自動提示
ajax技術從2005年就開始流行了起來,主要是這種技術能給使用者帶來更好的瀏覽體驗,它開啟了web2.0時代,現在的專案開發中或多或少都用了ajax技術。
先概括性地介紹一下ajax,ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。Ajax提供與伺服器非同步通訊的能力,藉助於Ajax技術,可以非同步地向伺服器發出請求,以執行更新或查詢資料庫。當請求返回時,就可以使用JavaScript和CSS來相應地更新頁面,而不是重新整理整個頁面。最重要的是,使用者甚至不知道瀏覽器正在與伺服器通訊,Web站點看起來好象是即時響應的。
Ajax的核心是JavaScript物件XmlHttpRequest。該物件在Internet Explorer 5中首次引入,它是一種支援非同步請求的技術。簡而言之,XmlHttpRequest使您可以使用JavaScript向伺服器提出請求並處理響應。
下面是本人使用ajax實現的一個簡單例子,該例項實現了輸入時的自動提示,類似於google輸入時的提示。
基本思路是:前臺輸入查詢條件,在輸入的同時觸發一個javascript事件,該事件建立一個XMLHttpRequest物件並異步向伺服器提交請求,伺服器端收到請求後執行資料庫查詢,將查詢得到的資料以字串的形式返回至客戶端瀏覽器,然後將該字串在客戶端瀏覽器顯示。
首先來看一下這個簡單示例的執行效果:
按照如下的步驟進行:
1、編寫一個jsp頁面,在這個頁面中有一個輸入框,當用戶在該輸入框中輸入了一個字元之後,在輸入框下方將自動顯示符合輸入條件的從資料庫中查詢出來的值。下面是該jsp頁面的完整程式碼:index.jsp
<%@ page language="java" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>AJAX輸入提示</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <style type="text/css" media="screen"> .onmouset_out { background-color: #99CCFF; padding: 2px 6px 2px 6px; } .onmouset_over { background-color: #006600; padding: 2px 6px 2px 6px; } #result_display { border: 1px solid #FFFFFF; } </style> <script type="text/javascript"> var xmlHttp; //建立XMLHttpRequest物件 function createXmlHttp() { //根據window.XMLHttpRequest物件是否存在使用不同的建立方式 if (window.XMLHttpRequest) { //FireFox、Opera等瀏覽器支援的建立方式 xmlHttp = new XMLHttpRequest(); } else { //IE瀏覽器支援的建立方式 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } function inputSuggest() { var txtValue = document.getElementById('txt').value; createXmlHttp(); xmlHttp.onreadystatechange = _handle; url = "suggest.do?txtValue=" + txtValue; xmlHttp.open("POST", url, false); xmlHttp.send(null); } function _handle() { if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ var str = xmlHttp.responseText.split("#"); var s = document.getElementById('result_display') s.innerHTML = ''; for(i=0; i < str.length - 1; i++) { var suggest = '<div onmouseover="onmouseOver(this);" '; suggest += 'onmouseout="onmousetOut(this);" '; suggest += 'onclick="setSuggestValue(this.innerHTML);" '; suggest += 'class="onmouset_out">' + str[i] + '</div>'; s.innerHTML += suggest; } } } } function onmouseOver(div) { div.className = 'onmouse_over'; } function onmousetOut(div) { div.className = 'onmouset_out'; } function setSuggestValue(value) { document.getElementById('txt').value = value; document.getElementById('result_display').innerHTML = ''; } </script> </head> <body> <h3>一個簡單的AJAX輸入提示</h3> <form id="frmSearch" action=""> <input type="text" id="txt" name="author" alt="輸入條件" onkeyup="inputSuggest();" style="width:200px"/> <input type="submit" id="search" value="搜尋" alt="搜尋"/><br /> <div id="result_display" style="width:200px"> </div> </form> </body> </html>
2、編寫後臺處理非同步請求的處理器,該處理器我採用的是struts1.2的action,你使用其他的(如servlet,struts2等)都一樣,下面是該action的完整程式碼:SuggestAction.java
package org.hnylj.ajax.action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hnylj.db.DbManager;
/**
* 根據前臺輸入非同步從後臺獲取資料的Action
* @編寫者:hnylj
*
*/
public class SuggestAction extends Action {
private DbManager dbManager;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String param = request.getParameter("txtValue");
dbManager = new DbManager();
String result = dbManager.searchSuggest(param);
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
return null;
}
}
3.該action呼叫了一個數據庫操作類,下面是該資料庫操作類的完整程式碼:DbManager.java
package org.hnylj.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 資料庫管理與操作
* @編寫者:hnylj
*
*/
public class DbManager {
private Connection conn;
private Statement stmt;
private ResultSet rs;
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost/suggest";
private static final String USERNAME = "root";
private static final String PASSWORD = "123";
// 資料庫連線
public synchronized Connection getConnection() {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return conn;
}
/**
* 獲取符合輸入條件的資料
* @param conn
* @param sql
* @return
*/
public String searchSuggest(String param) {
String sql = "select author from article where author like '" + param + "%' order by author";
String author = "";
String str = "";
try {
conn = this.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
author = rs.getString("author");
str += author + "#";
}
} catch (SQLException e) {
e.printStackTrace();
return "";
}
return str;
}
}
4.整個應用你還需要其他的一些配置:
(1). 資料庫表(使用mysql):
create database suggest;
use suggest;
create table article (
stu_id integer auto_increment,
author varchar(30) not null,
title varchar(50) not null,
primary key(stu_id)
);
insert into article(author,title) values('hnylj','ajax');
insert into article(author,title) values('hylj','java');
insert into article(author,title) values('hxycj','struts');
insert into article(author,title) values('hzyhj','hibernate');
insert into article(author,title) values('haykj','spring');
insert into article(author,title) values('hkyth','oracle');
insert into article(author,title) values('hlyyi','lucence');
(2).保證struts程式正常執行所需要的其他配置,在這裡不一以列出,你可以下載我提供的附件,該附件是一個完整的可以執行的程式。
jsp頁面程式碼有點醜陋,大家可以在其基礎上修改,也可以增強其功能,例如增加每個顯示結果的條數等!
一個Java技術交流群,一起交流,共同進步,扣扣群號:513086638
相關推薦
ajax實現輸入時的自動提示
ajax技術從2005年就開始流行了起來,主要是這種技術能給使用者帶來更好的瀏覽體驗,它開啟了web2.0時代,現在的專案開發中或多或少都用了ajax技術。 先概括性地介紹一下ajax,ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。Ajax提供
經典ajax例項-ajax實現輸入時的自動提示jsp(轉)
ajax技術從2005年就開始流行了起來,主要是這種技術能給使用者帶來更好的瀏覽體驗,能建立更豐富的web頁面,現在的專案開發中或多或少都用了ajax技術。 先概括性地介紹一下ajax,ajax是Asynchronous JavaScript and XML(以及 DH
ajax實現輸入框提示資訊
HtmlPage1.html <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript">
JQuery ajax實現註冊時非同步實時檢測使用者名稱是否重名並進行提示
版權宣告:本文為博主原創文章,未經博主允許不得轉載。https://blog.csdn.net/qq_40348465/article/details/83217840 此處主要是在JAVAWeb專案中利用JQuery AJAX中的$.get()方法以及input標籤
原生ajax 實現輸入框模糊查詢,自動匹配資料庫資料
1、頁面程式碼如下 <div class="d-search-condition"><label class="d-search-condition-label">病人姓名:</label><input type="text" id
網頁中文字框下拉選擇輸入與自動提示功能的實現
在網頁設計中我們經常需要使用者進行輸入操作,下面我分享兩種使用者的輸入功能。 1.輸入框自動提示 瀏覽網頁的時候我們經常會遇到輸入框內我們輸入前幾個字,
zshell 實現類似 fish 自動提示
sudo git some 作用 自動提示 post 註意 解決 code 第一步 克隆下載 https://github.com/zsh-users/zsh-autosuggestions git clone git://github.com/zsh-users/zsh-
轉】Eclipse編輯Spring配置檔案xml時自動提示類class包名
轉自 http://bigdragon.iteye.com/blog/2396081 第一步,先檢視下自己的Eclipse是什麼版本,步驟如下: 1.1 點選Eclipse選單‘Help -> About Eclipse’,
如何使.xml檔案像.java檔案一樣在編寫時自動提示程式碼!(從檢視編輯改為原始碼編輯)
在Eclipse中開啟.xml檔案時,若沒有進行設定會以這種方式開啟(不怎麼適合編輯!): 但是我們強制將開啟方式改成text editor的時候,又會變成這種方式(沒有提示也不怎麼方便編輯): 網上一堆神仙,給的答案都不是我想要的!終於讓我發現了: 左下角有:Desi
Android輸入框自動提示進階--自定義佈局
發現Android的有兩種方法AutoCompleteTextView和MultiAutoCompleteTextView提示出來的提示框只是純文字而且是單條資料,要是想實現加一個圖片或者是每一條資料展示兩個資料呢,這就需要重寫介面卡設定佈局了 重寫介面卡: packag
Android輸入框自動提示
Android用的有兩種方法AutoCompleteTextView和MultiAutoCompleteTextView,第二種可以連續提示輸入,如下圖 AutoCompleteTextView常用屬性
在eclipse中設定輸入程式碼自動提示功能
開啟選單欄下的window,選擇最下方的preference 如圖選擇,java下的editor,點選content assist 選項如圖選擇,在auto activation triggers for java中新增.abcdefghijklmnopqrstuvwxy
GXT TextField 實現輸入大小寫自動轉換
自動大小寫轉換無需註冊監聽鍵盤事件,程式碼實現如下 TextField tf = new TextField(); tf.setInputStyleAttribute("text-transform", "uppercase");此方法只改變現實大小寫。
MyEclipse 2015實現JavaScript程式碼自動提示(不需要額外安裝外掛)
步驟一: 在window>myeclipse>javascript>tern>development>repository 勾選了需要支援的jquery\javascr
Eclipse新增DTD檔案實現xml的自動提示功能
以iBATIS編寫 Sql Map Config 配置檔案為例, 新增 sql-map-config-2.dtd 到Eclipse中, 從而獲得xml自動的提示的功能, 能更好的按照iBATIS官方定義的規範來編寫xml文件. 記住xml中有這麼一句話. <
sublime text 3 在寫 css 時自動提示類名的解決方案
ctrl+shift+p命令列輸入 Package Control: Add Repository 進入後輸入 https://github.com/andruhon/SublimeAllAutocomplete 然後在install package
c#TextBox輸入框自動提示、自動完成、自動補全功能
功能概覽 相關屬性 TextBox.AutoCompleteCustomSource 屬性 獲取或設定當 TextBox.AutoCompleteSource 屬性設定為 [CustomSource] 時要使用的自定義 T:Sy
MyEclipse實現xml的自動提示
每次出現不能自動提示,蠻煩的。雖然不是一個很難的問題,但是有時候就是記得這個很簡單的幾步,所以記錄下來以備用。 現在mybatis主要是3版本,即此時根據版本3來寫的,別的都一樣。 1,下載dtd檔
JQuery.autocomplete擴充套件功能:實現多列自動提示
最近做一個專案,用到了JQuery的自動補全函式,但預設的是隻顯示一列資料,所以就略加修改,拿出來獻醜了。 下面這個是預設呼叫本地資料: $("#tags").autocomplete(["c++","java", "php", "col
AutoCompleteTextView輸入框自動提示功能
public class SuggestPoiAdapter extends BaseAdapter implements Filterable { private static final int ITEM_BAIDU = 0; private static final int CLOSE_