1. 程式人生 > >SpringMVC與Ajax互動的幾種形式

SpringMVC與Ajax互動的幾種形式

  • 情景:解析物件為json資料進行返回

       SpringMVC:@RequestBody-將請求json串轉化成java物件,@ResponseBody-將java物件轉換成json串輸出

  • 前提:
  1. 匯入json資料轉換的三個核心jar包(@RequestBody和 @ResponseBody依賴)
  2. 在介面卡中配置json資料轉換的解析器(因為使用的註解驅動內建包含,所以不需要再進行配置)
  3. JSP介面:引入jquery標頭檔案,使用Jquery的Ajax提交請求資訊,執行controller後返回的json串在ajax中進行解析

 第一種:請求key/value,輸出json串【最常用】

  •  Ajax:
<script type="text/javascript">
function login() { 
	$.ajax({
		type : 'post',
		url : '${pageContext.request.contextPath}/user/login.mvc',
		//請求資料是key/value,這裡不需要指定contentType,預設就是key/value型別
		data:'username=cyn&age=18', 
		cache : false,
		sync : true,
		success : function(msg) {
			//返回並解析json串
			alert(msg.username);	
		},
		error : function() {
			alert("請求失敗!");
		}
	});
	} 
</script>
  • SpringMVC:
        @RequestMapping("login")
	@ResponseBody
	public User login(User user){
		System.out.println(user);
		return user;
	}

第二種:請求json串,輸出json串

  • Ajax:
<script type="text/javascript">
function login() { 
	$.ajax({
		type : 'post',
		url : '${pageContext.request.contextPath}/user/login.mvc',
                //指定請求資料格式是json串
	        contentType:'application/json;charset=utf-8', 
		data:'{"username":"zhangsan","age":"12"}',  
		cache : false,
		sync : true,
		success : function(msg) {
			//從返回結果集中獲取username的值
			alert(msg.username);	
		},
		error : function() {
			alert("請求失敗!");
		}
	});
	} 
</script>
  • SpringMVC: 
        @RequestMapping("login")
	@ResponseBody
	public User login(@RequestBody User user){
		System.out.println(user);
		return user;
	}

第三種: 請求key/value,輸出字串

  • Ajax:
<script type="text/javascript">
function login() { 
	$.ajax({
		type : 'post',
		url : '${pageContext.request.contextPath}/user/login.mvc',
		//請求資料是key/value,這裡不需要指定contentType,預設就是key/value型別
		data:'username=cyn&age=18', 
		cache : false,
		sync : true,
		success : function(msg) {
			//返回並列印字串
			alert(msg);	
		},
		error : function() {
			alert("請求失敗!");
		}
	});
	} 
</script>
  • SpringMVC:
        @RequestMapping("login")
	public void login(HttpServletResponse response,User user){
		
		System.out.println(user);
		try {
			response.getWriter().write(user.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

  •  測試: 
<%@ 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>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>
<title>Insert title here</title>
<script type="text/javascript">
function login() { 
	$.ajax({
		type : 'post',
		url : '${pageContext.request.contextPath}/user/login.mvc',
		//指定請求資料格式是json串
	    contentType:'application/json;charset=utf-8', 
		data:'{"username":"zhangsan","age":"12"}',  
		cache : false,
		sync : true,
		success : function(msg) {
			//從返回結果集中獲取username的值
			alert(msg);	
		},
		error : function() {
			alert("請求失敗!");
		}
	});
	} 
</script>
</head>
<body>

	<button onclick="login()">傳送ajax請求</button>

</body>
</html>