JavaWeb ajax非同步自動填充(含圖解執行流程)
阿新 • • 發佈:2019-01-29
資料庫表
先看結果
按aa顯示的結果:
按aaa顯示的結果:
檔案目錄
關鍵知識點
1.jQuery中的ajax
$.post(url,[params],fn,[type])
1.1傳送post請求
··url:請求的路徑
··params:請求的引數
··格式1:字串 key1=value1&key2=value2
··格式2:json格式
··{“key1”:value1,”key2”:value2}
··fn:回撥函式
··function(data){
····//data:響應回來的資料
}
type:返回內容的格式
一般不需要自己設定,如果需要設定一般設定為 “json”
1.2傳送get請求
$.get(url,[params],fn,[type])
2.JSON
概述:
··JavaScript 物件表示法(JavaScript Object Notation)
··是儲存和交換文字資訊的語法。類似 XML
··比 XML 更小、更快,更易解析
格式:
··格式1:json物件
··{ “key”:”value” , “key”:”value” }
··value可以為任意型別的資料
格式2:json陣列
··[“aa”,”bb”]
··[{ “key”:”value” , “key”:”value” },{ “key”:[“aa”,”bb”] , “key”:”value” }]
圖解執行流程
可以先大概的看下執行流程,然後看下面程式碼,會有助於理解
jsp頁面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<style>
#searchResult {
display : none;
background-color: white;
width: 196px;
padding: 5px;
position: absolute;
z-index: 999;
}
ul li{
list-style:none;
}
</style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 匯入jquery類庫 -->
<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<title>Insert title here</title>
<script type="text/javascript">
//頁面載入之後函式
$(function() {
//查詢框檢測按鍵彈起事件
$("#sear").keyup(function() {
//獲取使用者輸入的值
var keywords = this.value;
//獲取的值不為空,才請求後臺資料
if (keywords != "") {
var url = "${pageContext.request.contextPath}/demo";
var params = "parameters=" + keywords;
function fn(data) {
$searchResult = $("#searchResult");
if (data.length > 0) {
//將返回結果到ul標籤下的html下面資料清空
$searchResult.html("");
//迴圈遍歷返回回來的資料
$.each(data, function(index, ele) {
//將遍歷回來的資料追加到ul標籤下
$searchResult.append("<li>" + ele + "</li>");
});
//遍歷完成後,將資料顯示出來
$searchResult.show();
} else {
//如果資料為空,也將ul標籤隱藏
$searchResult.hide();
}
}
//jQuery中使用ajax的方式
//ulr:請求的路徑
//params:請求攜帶的引數
//fn:回撥函式,既響應回來的資料,然後執行fn下面的程式碼,展示到瀏覽器
//"json":返回內容的格式
$.post(url, params, fn, "json");
} else {
$("#searchResult").hide();
}
});
});
</script>
</head>
<body>
<!-- 搜尋框 -->
使用者名稱:<input type="text" class="form-control" id="sear" placeholder="Search">
<ul id="searchResult" ></ul>
</body>
</html>
web層
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itheima.service.UserService;
public class DemoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//獲取瀏覽器請求的引數
String keywords = request.getParameter("parameters");
//建立service層物件
UserService service = new UserService();
//將資料傳到service層,並讓其返回一個json資料
String jsonList = service.findByWords(keywords);
System.out.println(jsonList);
//將json資料響應到瀏覽器
response.getWriter().print(jsonList);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Service層
package com.itheima.service;
import java.sql.SQLException;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.itheima.dao.UserDao;
import com.itheima.domain.User;
public class UserService {
public String findByWords(String keywords) throws SQLException {
UserDao dao = new UserDao();
//呼叫到層資料,並返回list資料
List list =dao.findByWords(keywords);
//將list轉換成json資料(通過阿里巴巴提供的fastjson的jar包)
String jsonStr = JSON.toJSONString(list);
//將json資料返回到web層
return jsonStr;
}
}
Dao層
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import com.itheima.domain.User;
import com.itheima.utils.C3P0Utils;
public class UserDao {
public List findByWords(String keywords) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql="select username from user where username like ? ";
//傳入模糊查詢的引數
String params="%"+keywords+"%";
List<Object> list = qr.query(sql, new ColumnListHandler() ,params );
return list;
}
}