JQuery 是 javascript 的一個框架集合 , 並非什麼新的技術。javascript
- 寫少代碼,作多事情【write less do more】
- 免費,開源且輕量級的js庫,容量很小
注意:項目中,提倡引用min版的js庫
- 兼容市面上主流瀏覽器,例如 IE,Firefox,Chrome
注意:jQuery不是將全部JS所有封裝,只是有選擇的封裝
- 可以處理HTML/JSP/XML、CSS、DOM、事件、實現動畫效果,也能提供異步AJAX功能
- 文檔手冊很全,很詳細
- 成熟的插件可供選擇
- 提倡對主要的html標籤提供一個id屬性,但不是必須的
- 出錯後,有必定的提示信息
- 不用再在html裏面經過<script>標籤插入一大堆js來調用命令了
複製代碼
一、JS是一門前端語言。 二、Ajax是一門技術,它提供了異步更新的機制,使用客戶端與服務器間交換數據而非整個頁面文檔,實現頁面的局部更新。 三、jQuery是一個框架,它對JS進行了封裝,使其更方便使用。jQuery使得JS與Ajax的使用更方便html
1.引用JQuery.js文件前端
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
複製代碼
2.經常使用方法 .load()java
$("#div01").load("userservlet"); 解釋:找到頁面id爲div01的標籤,再加載路徑爲userservlet的文件,這裏指servlet路徑。jquery
$("#div01") 至關於JavaScript中的document.getElementById("div01")ajax
$.get(url,function(data){});數據庫
一get請求的方式向服務器傳輸數據,能夠不加function()無需參數返回。 若需添加請求的參數,直接添加在URL上,例如"usernameServlet?name="eric"; 若須要返回值,則添加一個數據回調函數json
$.post(url,data,callback);瀏覽器
已post方式向服務器提交數據,並返回 url:所處理的控制類的路徑 data:像服務器傳遞的數據,其格式爲:{name:"zhangsan",age="18"} callback:獲取服務器返回的回調函數,格式爲function(data,status){},status表示狀態,200表示成功。bash
eg:
$.post("<%=basePath%>customer/update.action",$("#edit_customer_form").serialize(),function(data){
if(data=="1"){
alert("客戶信息更新成功!");
}else{
alert("客戶信息更新失敗!");
}
window.location.reload();
});
函數二:
if(confirm('確實要刪除該客戶嗎?')) {
$.post("<%=basePath%>customer/delete.action",{"id":id},function(data){
if(data=="1"){
alert("客戶刪除刪除成功!");
}else{
alert("客戶信息刪除失敗!");
}
window.location.reload();
});
}
複製代碼
注意:上述有兩個點: $("form").serialize()
jQuery ajax()使用serialize()提交form數據,若是打印 $("form").serialize()的值, 格式是:id=12&name="eric"&age=18&city="aa"....... 那麼,問題來了,咱們在服務器的Controller中應當如何去接收呢? 用@ResponseBody接收 confirm('')
在JavaScript中共有三種彈出框(alert,confirm,prompt)
.val(),.html(),.text()
JQuery獲取標籤的值和賦值的方法 下面說一下三者之間的區別:
$.ajax()
提層實現基於Ajax的使用,關鍵在於內部的參數如何寫,這裏直接上代碼
function editCustomer(id) {
$.ajax({
type:"get",
url:"<%=basePath%>customer/edit.action",
data:{"id":id},
success:function(data) {
$("#edit_cust_id").val(data.cust_id);
$("#edit_customerName").val(data.cust_name);
$("#edit_customerFrom").val(data.cust_source)
$("#edit_custIndustry").val(data.cust_industry)
$("#edit_custLevel").val(data.cust_level)
$("#edit_linkMan").val(data.cust_linkman);
$("#edit_phone").val(data.cust_phone);
$("#edit_mobile").val(data.cust_mobile);
$("#edit_zipcode").val(data.cust_zipcode);
$("#edit_address").val(data.cust_address);
}
});
}
複製代碼
以上有一個點,那就是返回的數據data,data是有Controller層使用@ResponseBody直接將一個對象以Json的形式返回的。
需求:在咱們使用百度的時候,每每在輸入幾個字符後,它就會給咱們一個提示了,那麼前端頁面是如何實現響應的呢?
思路::使用.keyup獲取鍵盤彈起的事件,而後獲取輸入框的值,即每當鍵盤彈起後,就獲取此時輸入框的值,獲得輸入框的值後將數據發送(Post)到Controller層,Controller調用service層->持久層->獲取數據庫的信息,再將其返回前端頁面。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script>
<script type="text/javascript"src="../js/baidu.js"></script>
<title>Insert title here</title>
</head>
<body background="../105.jpg">
<center>
<h2>百度一下</h2>
<input type="text" id="word" style="width:500px;height:50px"/>
<input type="button" value="搜搜" style="width:80px;height:56px"/>
<div id="div01" style="position:relative;left:-43px; width:500px;height:300px;border: 1px solid blue;display: none"></div>
</center>
</body>
</html>
複製代碼
js:
//入口函數 之前是 $(document).ready(fuction(){})
//獲取鍵盤彈起的事件
$(function(){
$("#word").keyup(function() {
//獲取輸入框的信息,再上傳
// alert("asd");
var word=$(this).val();
//alert(word);
$.post("/AjaxAndJQuery/findServlet",{words:word},function(data,status){
//alert(data);
//返回的data是一個jsp頁面,如今咱們把它放在指定的div中
if(word==""){
$("#div01").hide();
}else{
$("#div01").show();
$("#div01").html(data);
}
});
})
});
複製代碼
Controller(這裏使用servlet):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//獲取數據,查詢數據庫,返回數據值
request.setCharacterEncoding("utf-8");
String word = request.getParameter("words");
//
findDao findDaoImpl = new findDaoImpl();
List<String> list = findDaoImpl.findInformation(word);
//打印從數據庫獲取的內容
for (String news : list) {
System.out.println(news);
}
request.setAttribute("words", list);
response.setContentType("text/html;charset=utf-8");
/**
* 誰請求,它就把頁面返回給誰,通常咱們都是用瀏覽器去訪問,它就把頁面返回給瀏覽器
* 當我用JQuery去訪問,它就把數據返回給JQuery,放在data數據裏面
*/
request.getRequestDispatcher("/JQueryFind/list.jsp").forward(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
複製代碼
注意:此處返回的是一個jsp頁面,也就是說,在JQuery中的data是一個jsp頁面 list.jsp
<body>
<table style="width:500px">
<c:forEach items="${words}" var="word">
<tr>
<td>${word}</td>
</tr>
</c:forEach>
</table>
</body>
複製代碼
需求:當咱們在註冊時,可能會出現選城市的狀況,好比當你province選擇湖北後,對應的city就自動刷新爲湖北下面的城市,那麼其前端頁面的邏輯是如何實現的呢?
思路: 首先找到省份元素的標籤,而後根據.change事件,當其發生改變時,將其value值經過$.post()發送至Controller層,控制層返回結果(以XML或Json)的方式。
下面介紹第一種:Controller層經過XML與前端頁面
Controller(servlet實現)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1.獲取參數
int pic = Integer.parseInt(request.getParameter("pic"));
//2.獲取城市列表
cityDao cityImpl = new cityDaoImpl();
List<city> findCity = cityImpl.findCity(pic);
//3.將其返回
//已XML的形式返回
XStream xstream=new XStream();
//設置類別名
xstream.alias("city", city.class);
//將類成員做爲屬性
xstream.useAttributeFor(city.class, "pic");
String xml = xstream.toXML(findCity);
//設置返回格式
response.setContentType("text/xml;charset=utf-8");
response.getWriter().write(xml);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
複製代碼
注意: XStream xstream=new XStream();將對象轉換爲XML的形式或者XML轉爲對象的格式。 具體使用找了一篇寫的比較詳細的博客:
JS:
$(function(){
//1.找到省份元素,一旦發生改變,就去請求該省份的元素
$("#province").change(function(){
//得到province的value
var pic=$(this).val();
//post請求
$.post("/AjaxAndJQuery/findCity",{pic:pic},function(data,status){
//有一個數據回調 status表示返回的狀態值,200表示ok
//返回的是一個XML文檔,須要的是其中的<name>標籤中的值
/*
* <city pic="2">
<name>惠州</name>
</city>
<city pic="2">
<name>梅州</name>
</city>
*/
//清空之前查詢過的值
$("#city").html("<option value=''>-請選擇 -");
$(data).find("city").each(function(){
//表示遍歷出來的每個元素都走這一個方法,遍歷一次city,就執行一次fuction方法
//.find("city")獲得全部的city,而後遍歷
//var pic=$(this).children("")
var name=$(this).children("name").text();
//alert(name);
//在手冊添加欄能夠查到
$("#city").append("<option value=''>"+name);
});
});
});
})
複製代碼
jsp:
<body>
省份:
<select name="province" id="province">
<option value="">-請選擇 -
<option value="1">湖北
<option value="2">廣東
<option value="3">山東
<option value="4">河南
</select>
城市:
<select name="city" id="city">
<option value="">-請選擇 -
</select>
</body>
複製代碼
方式二:COntroller經過Json與前端頁面交互 說明:能夠直接採用如下方式(@ResponseBody)
@RequestMapping("edit")
@ResponseBody
/**
* jsp頁面中直接接收一個json串,因此直接將對象轉換成json數據格式
* @param id
* @return
*/
public Customer edit(Integer id){
Customer customer = customerService.getCustomerById(id);
return customer;
}
複製代碼
可是因爲個人案例是使用servlet寫的,即需拼裝Json串(能夠手動拼裝或者經過工具類) 這裏採用的是 JSONArray jsonArray = JSONArray.fromObject(findCity);
servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1.獲取參數
int pic = Integer.parseInt(request.getParameter("pic"));
//2.獲取城市列表
cityDao cityImpl = new cityDaoImpl();
List<city> findCity = cityImpl.findCity(pic);
//3.將其返回
//已Json的形式返回
JSONArray jsonArray = JSONArray.fromObject(findCity);
String json = jsonArray.toString();
System.out.println(json);
//設置返回格式
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(json);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
複製代碼
js:
$(function(){
//1.找到省份元素,一旦發生改變,就去請求該省份的元素
$("#province").change(function(){
//得到province的value
var pic=$(this).val();
//post請求
$.post("/AjaxAndJQuery/findCityJson",{pic:pic},function(data,status){
//有一個數據回調 status表示返回的狀態值,200表示ok
/**
* 返回的data是json形式的字符串
* [{"name":"廣州","pic":2},{"name":"深圳","pic":2},{"name":"惠州","pic":2},{"name":"梅州","pic":2}]
*/
//清空之前查詢過的值
$("#city").html("<option value=''>-請選擇 -");
//遍歷data,獲取到【】中的{}內容,在經過 city.屬性 的方式訪問其值,其中city自定義,至關於給{}總體封裝成一個對象了
$(data).each(function(index,city){
$("#city").append("<option value=''>"+city.name);
});
},"json");
});
})
複製代碼
jsp:同上