Ajax——異步前后端交互提升OA系統性能體驗

本文介紹了Ajax中的基礎使用,包括XMLHttpRequest的狀態變化、并使用BMI 場景的示例進行介紹,以及結合 DAO 和 Servlet 處理OA系統復雜業務邏輯和JSON數據的處理等等。

本文目錄

      • 一、Ajax 基礎
        • html頁面
      • 二、 XMLHttpRequest
        • XMLHttpRequest的狀態變化
        • 同步和異步
      • 三、計算 BMI 場景
      • 四、 如何使用 DAO 和 Servlet 處理復雜業務邏輯
        • 根據 id 查詢的 Dao 對象
        • 創建 Servlet
        • 創建請求的頁面
      • 五、 JSON 數據處理
        • 接收 json 數據

一、Ajax 基礎

html頁面

搭建包含用于觸發 Ajax 請求元素,如按鈕、輸入框和顯示響應結果區域的 HTML 頁面。使用OA用于查詢員工績效的頁面為例。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>員工績效查詢</title>
</head>
<body><input type="text" id="employeeId" placeholder="輸入員工 ID"><button onclick="getPerformance()">查詢績效</button><div id="performanceResult"></div><script>function getPerformance() {// 請求邏輯}</script>
</body>
</html>

二、 XMLHttpRequest

XMLHttpRequest的狀態變化
  • 狀態碼含義XMLHttpRequest 對象有 5 種狀態,0 表示未初始化,1 表示已打開,2 表示已發送,3 表示正在接收,4 表示已完成。可根據狀態變化處理不同階段的邏輯。
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById('performanceResult').innerHTML = xhr.responseText;} else {document.getElementById('performanceResult').innerHTML = '請求出錯';}}
};
同步和異步
  • 同步:請求發出后,瀏覽器會等待服務器響應,期間頁面會被阻塞,用戶無法進行其他操作。例如傳統的表單提交。
  • 異步:請求發出后,瀏覽器不會等待服務器響應,用戶可以繼續操作頁面。使用 Ajax 實現異步請求,可提升用戶體驗。

三、計算 BMI 場景

  • 原理:通過 Ajax 向服務器發送身高、體重數據,服務器計算 BMI 后返回結果。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>BMI 計算</title>
</head>
<body><input type="text" id="height" placeholder="身高(cm)"><input type="text" id="weight" placeholder="體重(kg)"><button onclick="calculateBMI()">計算 BMI</button><div id="bmiResult"></div><script>function calculateBMI() {const height = document.getElementById('height').value;const weight = document.getElementById('weight').value;const xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {document.getElementById('bmiResult').innerHTML = xhr.responseText;}};xhr.open('GET', `bmiServlet?height=${height}&weight=${weight}`, true);xhr.send();}</script>
</body>
</html>
  • 后端代碼Servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/bmiServlet")
public class BMIServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");double height = Double.parseDouble(request.getParameter("height")) / 100;double weight = Double.parseDouble(request.getParameter("weight"));double bmi = weight / (height * height);response.getWriter().write("您的 BMI 是:" + bmi);}
}

四、 如何使用 DAO 和 Servlet 處理復雜業務邏輯

搭建包含數據庫連接、DAO 對象和 Servlet 的開發環境,用于處理復雜業務邏輯。下面以員工信息管理為例。

根據 id 查詢的 Dao 對象
  • 封裝數據庫查詢操作,根據員工 ID 查詢員工信息。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class EmployeeDao {public String getEmployeeInfo(int employeeId) {String info = null;try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa_system", "root", "root");PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM employees WHERE id = ?")) {pstmt.setInt(1, employeeId);ResultSet rs = pstmt.executeQuery();if (rs.next()) {info = "姓名:" + rs.getString("name") + ",部門:" + rs.getString("department");}} catch (SQLException e) {e.printStackTrace();}return info;}
}
創建 Servlet
  • 接收前端 Ajax 請求,調用 DAO 對象處理業務邏輯,并將結果返回給前端。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/employeeInfoServlet")
public class EmployeeInfoServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");int employeeId = Integer.parseInt(request.getParameter("employeeId"));EmployeeDao dao = new EmployeeDao();String info = dao.getEmployeeInfo(employeeId);response.getWriter().write(info);}
}
創建請求的頁面
  • 輸入員工 ID 的輸入框和觸發查詢的按鈕,通過 Ajax 發送請求。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>員工信息查詢</title>
</head>
<body><input type="text" id="employeeId" placeholder="輸入員工 ID"><button onclick="getEmployeeInfo()">查詢信息</button><div id="employeeInfoResult"></div><script>function getEmployeeInfo() {const employeeId = document.getElementById('employeeId').value;const xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {document.getElementById('employeeInfoResult').innerHTML = xhr.responseText;}};xhr.open('GET', `employeeInfoServlet?employeeId=${employeeId}`, true);xhr.send();}</script>
</body>
</html>

五、 JSON 數據處理

從數據庫查詢數據并以 JSON 格式返回給前端。

import com.google.gson.Gson;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@WebServlet("/employeeJsonServlet")
public class EmployeeJsonServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json;charset=UTF-8");List<Map<String, Object>> employeeList = new ArrayList<>();try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa_system", "root", "root");PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM employees")) {ResultSet rs = pstmt.executeQuery();while (rs.next()) {Map<String, Object> employee = new HashMap<>();employee.put("id", rs.getInt("id"));employee.put("name", rs.getString("name"));employee.put("department", rs.getString("department"));employeeList.add(employee);}} catch (SQLException e) {e.printStackTrace();}Gson gson = new Gson();String json = gson.toJson(employeeList);response.getWriter().write(json);}
}
接收 json 數據

通過 Ajax 請求獲取 JSON 數據,并在頁面上顯示。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JSON 數據查詢</title>
</head>
<body><button onclick="getEmployeeJson()">查詢員工 JSON 數據</button><div id="employeeJsonResult"></div><script>function getEmployeeJson() {const xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {const employees = JSON.parse(xhr.responseText);let result = '';employees.forEach(employee => {result += `ID:${employee.id},姓名:${employee.name},部門:${employee.department}<br>`;});document.getElementById('employeeJsonResult').innerHTML = result;}};xhr.open('GET', 'employeeJsonServlet', true);xhr.send();}</script>
</body>
</html>



← 上一篇 Ajax——在OA系統提升性能的局部刷新
記得點贊、關注、收藏哦!
下一篇 JUC小冊——公平鎖和非公平鎖 →

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91850.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【最后一個單詞的長度】

思路 逆向遍歷&#xff1a; 從字符串末尾開始向前遍歷&#xff0c;跳過末尾的空格&#xff0c;直到找到非空格字符。 遇到非空格字符時開始計數&#xff0c;直到再次遇到空格或字符串開頭。 狀態標記&#xff1a; 使用 state 標記是否已經進入最后一個單詞的計數階段&#xff1…

OpenCV學習 day3

一、灰度實驗 將彩色圖像轉換為灰度圖像的過程稱為灰度化&#xff0c;這種做法在圖像處理中和計算機視覺領域非常常見 1、灰度圖 灰度圖是一種 單通道圖像&#xff0c;每個像素僅存儲 亮度信息&#xff08;0純黑&#xff0c;255純白&#xff09;&#xff0c;沒有顏色信息&#…

基于單片機一氧化碳CO檢測/煤氣防中毒檢測報警系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 基于單片機的CO檢測系統通過傳感器實時監測環境中的一氧化碳濃度&#xff0c;結合信號處理電路與…

前端-移動Web-day3

目錄 1、視口 2、rem體驗 3、rem基本使用 4、媒體查詢 5、rem適配 6、rem布局 7、less-體驗 8、less-注釋 9、less-運算 10、less-嵌套 11、less-變量 12、less-導入 13、less-導出 14、less-禁止導出 15、案例-極速問診 1、視口 <!DOCTYPE html> <htm…

【正點原子K210連載】第二十四章 按鍵輸入實驗 摘自【正點原子】DNK210使用指南-CanMV版指南

第二十四章 按鍵輸入實驗 本章實驗將介紹如何使用CanMV讓Kendryte K210獲取板載按鍵的狀態。通過本章的學習&#xff0c;讀者將學習到在CanMV下讀取Kendryte K210的GPIO上的高低電平狀態。 本章分為如下幾個小節&#xff1a; 14.1 maix.GPIO模塊介紹 14.2 硬件設計 14.3 程序設…

基于springboot/java/VUE的旅游管理系統/旅游網站的設計與實現

用戶&#xff1a;注冊&#xff0c;登錄&#xff0c;旅游景點&#xff0c;酒店信息&#xff0c;旅游線路&#xff0c;公告信息&#xff0c;留言板&#xff0c;后臺管理&#xff0c;個人中心&#xff0c;門票預訂管理&#xff0c;酒店預訂管理管理員&#xff1a;登錄&#xff0c;…

Python Excel 高階教程:使用 Spire.XLS 插入、修改和刪除迷你圖

Python 操作 Word 文檔&#xff1a;主流庫對比與選擇指南 在辦公自動化、報告生成、數據處理等領域&#xff0c;利用 Python 程序化地創建、讀取或修改 Microsoft Word 文檔 (.docx 格式) 是一項非常實用的技能。Python 生態中有多個優秀的庫可以完成這項任務&#xff0c;但它…

WebPages PHP:深入解析PHP在網頁開發中的應用

WebPages PHP&#xff1a;深入解析PHP在網頁開發中的應用 引言 隨著互聯網技術的飛速發展&#xff0c;PHP作為一種開源的腳本語言&#xff0c;已經在網頁開發領域占據了舉足輕重的地位。本文將深入探討PHP在網頁開發中的應用&#xff0c;包括其優勢、常用框架、開發流程以及未來…

【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程

【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程 文章目錄【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程前言確定版本對應關系源碼編譯安裝Pytorch3d總結前言 本人windows11下使用搭建PyTorch3d環境&#xff0c;故此以詳細教程以該算法依賴的環境…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分離版:日志管理(四)集成Spring Security

目錄 一、前言 二、后端開發及調整 1.日志管理開發 2.配置調整 3.日志入庫&#xff08;注解、切面&#xff09; 三、前端調整 1.日志管理開發 四、附&#xff1a;源碼 1.源碼下載地址 五、結語 一、前言 此文章在上次調整的基礎上開發后端管理系統的用戶請求日志功能&…

ceph 14.2.22 nautilus Balancer 數據平衡

Ceph Balancer (upmap 模式) 啟用與配置 在 Ceph Nautilus (14.2.22) 版本中啟用和配置 Balancer 的完整步驟 1. 前提檢查 檢查集群的初始狀態和版本。 集群狀態 (ceph -s)cluster:id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxhealth: HEALTH_OKservices:mon: 3 daemons, quo…

在Linux上對固態硬盤進行分區、格式化和掛載的步驟

在Linux上對固態硬盤進行分區、格式化和掛載的步驟如下&#xff1a; 插入固態硬盤&#xff1a;將固態硬盤插入計算機的SATA或M.2接口。 確認固態硬盤被識別&#xff1a;打開終端&#xff0c;輸入以下命令查看硬盤是否被系統識別 fdisk -l 查找硬盤列表中的固態硬盤&#xf…

用Unity結合VCC更改人物模型出現的BUG

1、上傳模型時出現錯誤經過排查是因為服裝發型預制體放到人物模型上之后&#xff0c;物體上自動多了一個空腳本&#xff0c;懷疑是VRC工具箱自動添加的。解決方法&#xff1a;在上傳前將帶有空腳本的物體上的組件刪除即可2、添加頭發時出現模型碰撞錯誤按照【【VRCHAT】從零開始…

k8s之DevicePlugin

解密 Kubernetes Device Plugin&#xff1a;讓容器輕松駕馭特殊硬件 在容器化技術飛速發展的今天&#xff0c;容器憑借輕量、隔離、可移植的特性成為應用部署的主流選擇。但在實際應用中&#xff0c;當容器需要訪問 GPU、FPGA 等特殊硬件資源時&#xff0c;事情就變得不那么簡單…

動態規劃Day7學習心得

今天給動態規劃掃個尾&#xff0c;還有兩題。 第一道&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 兩層for循環&#xff0c;遍歷區間起始位置和終止位置&#xff0c;然后還需要一層遍歷判斷這個區間是不是回文。所以時間復雜度&#xff1a;O…

SpringCloud實戰:機器人對戰系統架構

基于Spring Cloud的機器人對戰 以下是基于Spring Cloud的機器人對戰實例相關案例和技術實現方向的整理,涵蓋微服務架構設計、通信機制及典型應用場景: 分布式對戰系統架構 采用Spring Cloud Alibaba+Nacos實現服務注冊與發現,每個機器人實例作為獨立微服務部署。通過Open…

LLM 核心能力解構與項目實踐指南

大語言模型&#xff08;LLM&#xff09;的爆發式發展&#xff0c;本質上是其核心能力在產業場景中的規模化驗證。作為技術博主&#xff0c;本文將系統拆解 LLM 的六大核心能力&#xff0c;結合工業級項目案例&#xff0c;提供從能力映射到工程實現的完整技術路徑&#xff0c;并…

retro-go 1.45 編譯及顯示中文

最近做了個使用 retro-go 的開源掌機 基于ESP32-S3的C19掌機&#xff08;適配GBC外殼&#xff09; - 立創開源硬件平臺 &#xff0c;做完后用提供的固件發現屏幕反顯了&#xff0c;估計是屏幕型號不太對&#xff0c;隨即自己拉 retro-go 官方庫來編譯&#xff0c;拉取的最新的 …

中州養老項目:Mybatis自動填充攔截器

功能:在新增護理項目的時候,創建人,創建時間和修改時間字段會自動攔截填充,這些公共字段可以省去我們一個一個處理的麻煩依靠:AutoFillInterceptor攔截器,MybatisConfig配置類第一步:我們需要借助一個MybatisConfig,configuration標志著這是一個配置類,我們需要將autoFillInter…

[創業之路-527]:什么是產品技術成熟度曲線?

產品技術成熟度曲線&#xff08;Gartner Hype Cycle&#xff09;是由全球知名咨詢機構Gartner提出的工具&#xff0c;用于可視化展示新興技術從誕生到成熟的發展軌跡&#xff0c;以及市場對其預期和實際采用趨勢的變化。該曲線通過五個階段刻畫技術生命周期&#xff0c;幫助企業…