文章目錄
-
- AJAX
-
- 1.$.ajax() 核心函數
- 1.1文法
- 2 $.get()
-
- 2.1文法
- 2.2例子
- 3 $.post()
- 3.1文法
- 4.實戰(對比)
AJAX
使用jQuery提供的函數實作Ajax請求的處理。代替直接使用XMLHttpRequest,但是jQuery實際還是使用的異步對象。
jQuery提供多個與AJAX有關的方法。通過jQuery AJAX方法,您能夠使用HTTP Get 和 HTTP Post 從遠端伺服器上請求文本、HTML、XML或JSON同時能夠把接收的資料更新到DOM對象。
1.$.ajax() 核心函數
$.ajax()是jQuery中AJAX請求的核心方法,所有的其他方法都是在内部使用此方法。
1.1文法
$.ajax({name:value,name:value,....})//json格式的參數
//json格式的參數:key是定義好的,需要開發人員給key指派。這些key是用來表示Ajax請求必須的參數。
PS:
1.參數是json資料,包含請求方式,資料,回調方法等。
2.json格式的參數:key是定義好的,需要開發人員給key指派。這些key是用來表示Ajax請求必須的參數。
3.例如:請求的url位址,是不是異步請求,請求的方式等等。
$.ajax({
//除了必用的,其他的都可以省略
url:"queryProvinceServlet",//必用的。
type:"get",
data:{"name":"李四","age":20},
dataType:"json",
success:function(resp){ 開發人員擷取資料,更新dom對象 },//必用的。
error:function(){alert("請求錯誤")}
})
參數:
url:伺服器端的位址,例如某個servlet的通路位址。queryProvinceServlet
type:表示請求方式,get,post。預設是get。這個值不用區分大小寫。
data:表示送出的請求參數,可以是String,數組,json類型的。推薦使用json格式。
例如:data:(“name”:“李四”,“age”:20)
jQuery在發送請求時,會把json中的key作為請求的參數使用,key對應的值作為參數資料。
queryProvinceServlet轉為的結果:http://localhost:8080/myweb/queryProvinceServlet?name=李四&age=20
dataType:
資料格式,可以是HTML、text、xml、json等等。表示發起請求後,希望伺服器端傳回的資料格式。
jQuery可以嘗試使用對應格式處理傳回的資料。比如你指定了dataType,表示希望伺服器傳回的是json格式資料。然後jQuery把json資料轉為json對象。
伺服器代碼可以擷取到dataType的内容。
例如:請求中dataType:“json”,jQuery發起請求後,在請求頭中
Accept | application/json, text/javascript, /; q=0.01 |
如果dataType:“text”,請求中Accept:text/plain,/;q=0.01
success:
函數function。當伺服器端傳回了資料,jQuery處理完資料後,執行這個函數。等同于異步對象的
readyState==4&&status==200//表示接收資料
的情況。
例如:sucess:function(resp){開發人員處理伺服器傳回的資料}
resp是自定義形參,相當于 resp = xhr.responseText;
error:
function(),當請求錯誤時,執行這個函數。
contentType:
表示請求的參數資料格式。例如application/json,這個内容可以不寫。
async:
是一個Boolean值,表示請求是同步的還是異步的。true是異步的,預設是true;false是同步的。
2 $.get()
$.get()這個函數就是執行get請求方式的ajax。
2.1文法
$.get(url,請求參數,success函數,dataType);
2.2例子
這種方式比$.ajax()要簡便很多。
$.get("queryName",{"proid":1},function(resp){擷取省份名稱},"text");
3 $.post()
$.get()這個函數就是執行get請求方式的ajax。
3.1文法
$.post("queryName",{"proid":1},function(resp){擷取省份名稱},"text");
4.實戰(對比)
之前使用js語句實作Ajax,但是使用jQuery實作Ajax更簡便清晰。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>使用Ajax查詢省份名稱</title>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$(function () {
//給按鈕綁定事件 開始
$("#btnSearch").on("click",function () {
//alert("button click");
$.ajax({
url:"queryJson",
type:"get",
data:{"proid":$("#proid").val()},
dataType:"json",
success:function (resp) {
//resp是伺服器傳回的資料,這個資料先通過jQuery處理的。
//jQuery按照dataType的格式,可以把伺服器傳回的資料轉為json對象。
//alert("resp===="+resp) //[object]
//更新dom
$("#proname").val(resp.name);
$("#projiancheng").val(resp.jiancheng);
$("#proshenghui").val(resp.shenghui);
}
})
})
//事件完成
$("#btnGet").click(function () {
$.get("queryJson",
{"proid":$("#proid").val()},
function (resp) {alert("收到的資料="+resp)},
"json"
)
})
})
</script>
</head>
<body>
<div align="center">
<p>根據id查詢省份全部資訊</p>
<table>
<tr>
<td>省份id:</td>
<td><input type="text" id="proid"></td>
</tr>
<tr>
<td>省份名稱</td>
<td><input type="text" id="proname"></td>
</tr>
<tr>
<td>省份簡稱:</td>
<td><input type="text" id="projiancheng"></td>
</tr>
<tr>
<td>省會名稱:</td>
<td><input type="text" id="proshenghui"></td>
</tr>
<tr>
<td>操作</td>
<td><input type="button" id="btnSearch" value="查詢" >
<input type="button" id="btnGet" value="Get查詢"></td>
</tr>
</table>
</div>
</body>
</html>
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yNzUDNxYTOzMzM1YGOzcDZxYzXzEjN0IDM3AzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
public class QueryProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String json ="";
String strProid = request.getParameter("proid");
Province p = null;
//判斷是否為空,并且不為空字元串
if(strProid!=null&&!strProid.trim().equals("")){
ProvinceDao dao = new ProvinceDao();
p = dao.queryProvinceName(Integer.valueOf(strProid));
//把對象轉為json,才通過HttpServletResponse輸出。
if(p!=null){//說明查出了真實的對象。
ObjectMapper om = new ObjectMapper();
json = om.writeValueAsString(p);
//得到一個JSON格式的字元串
}
}
//擷取請求頭中的accept
String accept=request.getHeader("Accept");
System.out.println("請求頭accept = "+accept);
System.out.println("sevlet province轉為json==="+json);
//可以處理不同的請求
if(accept.startsWith("application/json")){
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.println(json);
out.flush();
out.close();
}else if(accept.startsWith("text/plain")){
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("文本資料="+p.toString());
out.flush();
out.close();
}
//輸出json給ajax請求。
//application/json;給浏覽器輸出的是一個json格式的資料格式
/*
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.println(json);
out.flush();
out.close();
*/
}
}