<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Ajax 的英文全稱是 ”Asynchronous JavaScript and XML“,即 ”非同步的 JavaScript 和 XML“。其核心是通過 JavaScript 的 XMLHttpRequest 物件,以一種非同步的方式,向伺服器傳送資料請求,並且通過該物件接收請求返回的資料,從而實現使用者端與伺服器端的資料互動。
優點:Ajax 能夠重新整理指定的頁面區域(區域性重新整理),而不是重新整理整個頁面,從而減少使用者端和伺服器端之間的資料互動傳輸,提高頁面速度,使得使用者體驗更好。
初體驗:基於 jQuery 方式動態繫結事件提交
給【獲取驗證碼】按鈕繫結點選事件,當用戶點選該按鈕時,向後臺伺服器傳送 AJAX 請求獲取一個隨機驗證碼,登入頁面的整體不重新載入,僅做區域性的頁面重新整理。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>非同步請求</title> <script type="text/javascript" src="/static/js/jquery-2.0.0.min.js"></script> <script type="text/javascript"> $(function () { var btn = $("#flush"); btn.click(function () { $.ajax({ url: '/getCode', type:'get', data:'id=1', //字串 dataType:'text', success:function (data) { console.log(data); alert("後臺驗證碼:" + data); } }) }) }) </script> </head> <body> <div style="text-align: center;"> <h2>使用者登入</h2> <form> 使用者名稱:<input type="text" name="username"><br> 密 碼:<input type="password" name="password"><br> 驗證碼:<input type="text" name="code"><br><br> <input type="button" value="登入"> <input type="button" id="flush" value="獲取驗證碼"> </form> </div> </body> </html>
SpringBoot 後臺接收 AJAX 請求,首先要獲取該請求攜帶的引數 id=1
(該引數沒有實際意義,僅做演示使用),然後根據請求業務,對該結果進行響應。success
回撥函數對響應結果進行展示。
import javax.servlet.http.HttpServletRequest; import java.util.Random; @Controller public class TestController { @GetMapping("/ajax") public String index(){ return "form"; } //SpringBoot接收ajax請求的方式 //方式一:使用HttpServletRequest request接收請求引數 @GetMapping("/getCode") @ResponseBody public String getCode(HttpServletRequest request){ String id = request.getParameter("id"); System.out.println("AJAX傳遞的引數:" + id); //獲取5位驗證碼 return randomCodes(); } //方式二:用@Param對映單個值 @GetMapping("/getCode1") @ResponseBody public String getCode1(@Param("id") Integer id){ System.out.println(id); //獲取5位驗證碼 return randomCodes(); } public String randomCodes(){ String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; StringBuilder code=new StringBuilder(5); for(int i=0;i<5;i++) { char ch=str.charAt(new Random().nextInt(str.length())); code.append(ch); } return code.toString(); } }
上面介紹了兩種 SpringBoot 接收請求引數的方式:
public String getCode(HttpServletRequest request)
:使用 HttpServletRequest request 接收請求引數;public String getCode1(@Param("id") Integer id)
:用 @Param 對映單個值;Ajax 非同步請求一個典型的應用就是使用者表單輸入時,區域性重新整理驗證碼,而不會影響其他表單項已輸入的資訊。
傳統的 WEB 資料互動與 AJAX 資料互動比較:
$.ajax({屬性})
常用的屬性引數:
引數 | 描述 |
---|---|
url | 請求後端伺服器的地址 |
type | 請求方式,預設為 get 型別 |
data | 請求引數 |
dataType | 伺服器返回的資料型別,比如:text/json/xml 等 |
success | 請求成功的回撥函數 |
error | 請求失敗的回撥函數 |
complete | 請求完成的回撥函數(無論成功還是失敗,都會被呼叫) |
用法範例(伺服器與使用者端之間的資料互動型別是JSON):
$.ajax({ url:'/search', type:'post', data:{ 'id':$("#sid").val(), 'username':$("#uname").val(), 'password':$("#pwd").val() }, dataType:'json', success:function (data) { console.log(data); $("#sid").val(data.id); $("#uname").val(data.name); $("#score").val(data.score); } })
JSON(JavaScript Object Notation),一種輕量級資料互動格式,完成 js 與 Java/Python/PHP 等後端開 發語言物件資料之間的轉換。使用者端與伺服器之間傳遞物件資料時,需要使用 JSON 格式。
案例:使用 AJAX 校驗使用者輸入的資訊,編寫一個 2022 年碩士研究生招生考試成績查詢系統;
1、建立空白的 SpringBoot 專案,並在 pom.xml 匯入相關依賴;
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency>
2、在 MySQL 資料庫中建立一張考研成績資料表(stu_score),並錄入若干條測試資料;
3、在全域性組態檔 resources/application.yml 中設定資料來源資訊、檢視解析器以及埠號等相關設定等;
spring: thymeleaf: prefix: classpath:/templates/ suffix: .html mode: HTML5 encoding: UTF-8 datasource: url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver mvc: static-path-pattern: /static/** server: port: 8181 # 設定SQL紀錄檔 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4、建立資料表對應的實體類 Student;
package com.trainingl.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @TableName(value = "stu_score") public class Student { @TableId(type = IdType.ASSIGN_ID) private Long sid; private String sname; private String card; private Integer politics; private Integer english; private Integer math; private Integer computer; }
5、在路徑 com > trainingl > mapper 下建立介面 StudentMapper;
package com.trainingl.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.trainingl.entity.Student; import org.springframework.stereotype.Repository; @Repository public interface StudentMapper extends BaseMapper<Student> { //所有的CRUD操作都已經編寫好了 }
說明:由於系統規模較小,所以這裡省略了 Service 服務層。
6、建立 SearchController 控制器,主要負責接收使用者端瀏覽器的 AJAX 請求與響應。
package com.trainingl.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.trainingl.entity.Student; import com.trainingl.mapper.StudentMapper; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @Controller @RequestMapping("/suda") public class SearchController { @Autowired private StudentMapper studentMapper; @GetMapping("/search") public String home(){ return "login"; } @PostMapping("/login") @ResponseBody public Map<String,String> login(HttpServletRequest request){ String id = request.getParameter("id"); String username = request.getParameter("username"); String card = request.getParameter("password"); //查詢判斷 QueryWrapper<Student> wrapper = new QueryWrapper<>(); wrapper .eq("sid",id) .eq("sname", username) .eq("card", card); Integer count = studentMapper.selectCount(wrapper); //返回值 HashMap<String, String> map = new HashMap<>(); if (count == 1){ //登入驗證成功,通過id查詢該考生的成績(id具有唯一性) map.put("result", id); map.put("code","100"); }else { map.put("result","登入失敗!輸入資訊有誤!"); map.put("code","200"); } return map; } @GetMapping("/searchById/{id}") public ModelAndView searchById(@PathVariable Long id){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("person"); Student student = studentMapper.selectById(id); System.out.println(student); Integer total = student.getPolitics() + student.getEnglish() + student.getMath() + student.getComputer(); modelAndView.addObject("student", student); modelAndView.addObject("totalScore", total); return modelAndView; } }
7、檢視層(系統登入頁面、成績查詢頁面)
7.1 系統登入頁面(使用者端與伺服器之間的資料互動格式是JSON,請求方式是AJAX,而不是通過form表單完成)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>系統登入</title> <script type="text/javascript" src="/static/js/jquery-2.0.0.min.js"></script> <script type="text/javascript"> $(function () { var btn = $("#btn"); // 點選事件 btn.click(function () { $.ajax({ url:'/suda/login', type:'post', data:{ 'id':$("#sid").val(), 'username':$("#uname").val(), 'password':$("#pwd").val() }, dataType:'json', success:function (data) { if(data.code == "100"){ //登入成功,則跳轉到成績查詢頁面 window.location.href = "/suda/searchById/" + data.result; }else{ //登入失敗,則給出提示資訊 var msg = $("#btn"); msg.after("<br><br><span style='color:red;'>提示:"+data.result+"</span>") } } }) }) }) </script> </head> <body> <div style="text-align:center;"> <img src="/static/img/brand.png" style="width: 280px;height: 100px;"/> <h3>2022年碩士研究生招生考試成績查詢系統</h3> <img src="/static/img/logo.jpeg" style="width: 500px;height: 300px;"/> <!--這裡不通過form表單提交使用者端請求--> <form> 准考證號:<input type="text" name="id" id="sid"><br> 考生姓名:<input type="text" name="username" id="uname"><br> 身份證號:<input type="text" name="password" id="pwd"><br/> <br/> <input type="button" value="查詢" id="btn"> </form> </div> </body> </html>
注:如果輸入的資訊校驗失敗,則通過紅色字型給出提示,若資訊校驗成功,則會跳轉到初試成績的詳細介面。
7.2 成績詳細頁面(通過 thymeleaf 模板渲染資料)
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <html xmlns:th="http://www.thymeleaf.org"></html> <head> <meta charset="UTF-8"> <title>研究生初試成績查詢</title> </head> <body> <div style="text-align: center;"> <div style="border: 1px solid;"> <h3>2022年研究生考試初始成績查詢</h3> <br> 准考證號:<span th:text="${student.sid}"></span><br> 姓名:<span th:text="${student.sname}"></span><br> 身份證號:<span th:text="${student.card}"></span><br> <hr/> 思想政治理論:<span th:text="${student.politics}"></span><br> 英語(一):<span th:text="${student.english}"></span><br> 數學(一):<span th:text="${student.math}"></span><br> 電腦科學專業基礎(408):<span th:text="${student.computer}"></span><br> 總分:<span th:text="${totalScore}"></span><br> </div> <p>說明:若查詢的成績為負值,表示有缺考、違紀等情況。若仍對查詢結果有疑問,請諮詢相應的招生單位。 </p> </div> </body> </html>
總結:本專案用於演示 AJAX 與 SpringBoot 專案前後端資料互動,以案例+專案驅動的方式介紹了在 SpringBoot 專案開發中非同步請求前後端資料的傳遞方式。
到此這篇關於AJAX SpringBoot 前後端資料互動的專案實現的文章就介紹到這了,更多相關AJAX SpringBoot 資料互動內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45