ajax請求方式處理

1、前置準備

1.1、SpringBoot項目下:寫一個controller

@RestController
public class TestController {@RequestMapping("/yyy")public void test(HttpServletRequest request, HttpServletResponse response){String yang = request.getParameter("yang");System.out.println(yang);}
}

1.2、Html中寫一段jquery的$.ajax方法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!--注意:引入jquery--><script src="jquery-3.7.1.min.js"></script>
</head>
<body><script>var o = {key1: 'value1',key2: 'value2',yang: '12312312'}$.ajax({url: '/yyy',type: 'POST',data: o,// 其他參數...success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}});</script>
</body>
</html>

1.3、$.ajax的參數介紹

https://zhuanlan.zhihu.com/p/613814478

1、type:指定了請求的類型,常見的請求類型有GETPOSTPUTDELETE等,
分別對應著獲取數據、新增數據、更新數據、刪除數據等操作。type參數的默認值是GET2、url:請求的地址。可以是相對地址或絕對地址。在url中可以包含查詢參數,如“/api/data?id=1&name=test”。3、data:發送到服務器的數據,可以是字符串、對象或數組等格式。data可以是一個字符串、對象或數組等格式。如果是一個對象,會自動轉換4、為查詢參數的格式,如“id=1&name=test”。如果是一個數組,會將每個元素作為一個查詢參數,如“ids[]=1&ids[]=2&ids[]=3”。5、dataType:服務器返回的數據類型,常見的數據類型有xml、json、html、text等。根據dataType的值,jQuery會自動將服務器返回的數
據進行解析,以便JavaScript程序能夠方便地使用。6、success:請求成功時的回調函數。可以在這個函數中對返回的數據進行處理。success函數接收一個參數data,表示服務器返回的數據。7、error:請求失敗時的回調函數。可以在這個函數中處理錯誤。error函數接收三個參數:xhr表示XMLHttpRequest對象,status表示錯誤
的狀態碼,error表示錯誤的描述信息。8、beforeSend:發送請求前的回調函數,可以在這個函數中對請求進行處理,如添加請求頭信息。beforeSend函數接收一個XMLHttpRequest
對象作為參數,可以在這個對象上設置請求頭信息等。9、complete:請求完成后的回調函數,無論請求成功或失敗都會執行。complete函數接收一個XMLHttpRequest對象和一個表示請求狀態的字符串參數。

2、Get請求(JavaScript對象)

<script>var o = {key1: 'value1',key2: 'value2',yang: '12312312'}$.ajax({url: '/yyy',type: 'GET',data: o,// 其他參數...success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}
});

image-20231123093533118

3、Get請求(json字符串)

<script>var o = {key1: 'value1',key2: 'value2',yang: '12312312'}$.ajax({url: '/yyy',type: 'GET',data: JSON.stringify(o),//用于設置發送到服務器的數據的內容類型(Content-Type)contentType: 'application/json',// 其他參數...success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}
});</script>

image-20231123094522116

4、Post請求(JavaScript對象)

var o = {key1: 'value1',key2: 'value2',yang: '12312312'
}$.ajax({url: '/yyy',type: 'POST',data: o,// 其他參數...success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}
});

image-20231123092916975


image-20231123092921010


5、Post請求(json字符串)

var o = {key1: 'value1',key2: 'value2',yang: '12312312'
}$.ajax({url: '/yyy',type: 'POST',data: JSON.stringify(o),//用于設置發送到服務器的數據的內容類型(Content-Type)contentType: 'application/json',// 其他參數...success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}
});

image-20231123094255998

6、注意事項

6.1、contentType: ‘application/json’, 為什么 只能用post方法接受?

contentType: 'application/json' 通常與 POST 方法一起使用的原因是,它指定了請求體中數據的編碼類型為 JSON 格式。這種設置表明請求體中包含的數據是一個 JSON 字符串,而不是標準的表單數據。在服務器端,你通常需要根據請求頭中的 Content-Type 值來正確解析請求的數據。GET 請求通常將數據附加到 URL 的查詢字符串中,而不是放在請求體中,因此在這種情況下,設置 contentType: 'application/json' 并不是很有意義,因為 GET 請求通常不包含請求體。當使用 POST 請求時,數據可以包含在請求體中,而不會暴露在 URL 中。因此,當你想要向服務器發送 JSON 格式的數據時,通常使用 POST 請求,并設置 contentType: 'application/json'

image-20231123094822597

6.2、HttpServletRequest.getParameter可以接受的數據

        var o = {key1: 'value1',key2: 'value2',yang: '12312312'}$.ajax({url: '/yyy',//GET、POST、GET直接拼接、form表單type: 'POST',data: o,success: function(response) {// 處理成功的回調},error: function(error) {// 處理錯誤的回調}});

image-20231123095418927

6.3、前端傳遞:json數據,java接收

Content-Type(通常是"application/json)

6.3.1、springWeb項目獲取

用注解 @RequestBody

@RestController
public class MyController {@PostMapping("/receiveJson")public String receiveJson(@RequestBody MyData myData) {// 在這里處理接收到的JSON數據String name = myData.getName();int age = myData.getAge();// 進行業務邏輯處理return "JSON data received successfully!";}
}

6.3.2、Servlet中處理請求:獲取

在這個例子中,request.getInputStream()用于獲取請求的輸入流,然后使用BufferedReader從輸入流中讀取JSON數據。這種方法適用于POST請求,其中JSON數據是通過請求體發送的。請注意,這是一個基本的例子,實際應用中可能需要進行錯誤處理、數據驗證等。確保前端通過POST請求以正確的方式發送JSON數據,例如設置正確的Content-Type頭部(通常是"application/json")。如果你的應用使用Spring框架,推薦使用Spring提供的@RequestBody注解,因為它會自動處理JSON到對象的轉換,并提供更方便的方式來處理請求。
@WebServlet("/receiveJson")
public class MyServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 從請求中獲取輸入流InputStream inputStream = request.getInputStream();// 從輸入流中讀取JSON數據String jsonString = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));// 在這里處理接收到的JSON數據System.out.println("Received JSON: " + jsonString);// 進行業務邏輯處理// 返回響應response.getWriter().write("JSON data received successfully!");}
}

6.4、載荷:表單數據、請求負載

  • 載荷
"載荷"(payload)是一個通用術語,用于表示在計算機系統中傳輸的有效數據。在不同的上下文中,"載荷" 可以指代不同類型的數據。在 HTTP 請求的背景下,"載荷" 通常用于描述請求體中的數據。
  • 表單數據
在 Web 開發中,"表單數據" 通常指的是通過 HTML 表單提交的數據。當用戶填寫表單并點擊提交按鈕時,瀏覽器將用戶輸入的數據封裝成一個表單數據的集合,并通過 HTTP 請求將這些數據發送到服務器。這些表單數據可以使用不同的編碼方式,最常見的是 application/x-www-form-urlencoded 編碼,它將數據編碼為鍵值對的形式,類似于 URL 查詢字符串。另一種是 multipart/form-data 編碼,通常用于文件上傳。表單數據在請求體中以鍵值對的形式出現,例如 name=value。
  • 請求負載(Request Payload)
"請求負載" 是一個更通用的術語,指的是 HTTP 請求體中包含的所有數據,不僅僅局限于表單數據。它可以包含任何類型的數據,包括文本、二進制、JSON、XML 等。當使用 Ajax 或其他方式發送數據到服務器時,數據被包含在請求負載中。這可以是任何格式,取決于請求的內容類型(Content-Type)。如果請求負載是 JSON 格式的數據,通常使用 application/json 作為 Content-Type。在這種情況下,請求體中的數據是 JSON 字符串。

6.5、request.getInputStream() 讀取的是哪里的數據?

request.getInputStream() 方法從 HTTP 請求的主體(body)中獲取輸入流。
在 HTTP 請求中,請求主體包含了請求的具體數據,例如 POST 請求中的表單數據或 JSON 數據。當客戶端發送一個包含主體的 HTTP 請求時,請求主體的內容就會通過這個輸入流傳輸到服務器端。在服務端,你可以使用 request.getInputStream() 來讀取這個輸入流,從而獲取請求主體中的數據。對于 POST 請求而言,特別是使用 "application/x-www-form-urlencoded" 或 "multipart/form-data" 格式提交的表單數據,這些數據通常被包含在請求主體中。對于 JSON 數據,它也可以作為請求主體的一部分被發送。需要注意的是,對于 GET 請求,通常不會包含請求主體,而是將參數附加在 URL 的查詢字符串中。在這種情況下,不需要使用 request.getInputStream() 來獲取數據,而是可以使用 request.getParameter() 方法來獲取 URL 中的參數。

6.6、ajax 的post默認 是以什么格式提交?

默認情況下,使用Ajax的POST請求時,數據以"application/x-www-form-urlencoded"格式提交。
這是因為jQuery等Ajax庫的默認設置是將數據編碼為這種形式,這種編碼適用于普通的表單提交。這種格式要求將數據編碼成鍵值對的形式,每個鍵值對之間使用&符號分隔,而鍵和值之間使用等號(=)分隔。
例如,一個包含name和age參數的POST請求體可能如下所示:
name=John&age=30

如果你想要以JSON格式提交數據,你需要顯式地設置Content-Type為"application/json",并將數據以JSON字符串的形式發送。

例如,使用jQuery的$.ajax方法:

$.ajax({url: 'your-api-endpoint',type: 'POST',contentType: 'application/json',data: JSON.stringify({key1: 'value1',key2: 'value2'}),success: function(response) {// 處理響應},error: function(error) {// 處理錯誤}
});
在這個例子中,contentType: 'application/json'設置了請求的Content-Type,而data: JSON.stringify({...})將數據轉換為JSON字符串。
這樣發送的請求體將以JSON格式進行編碼。

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

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

相關文章

AI助力鋼鐵產業數字化,python基于YOLOv5開發構建鋼鐵產業產品智能自動化檢測識別系統

AI為工業產業智能化數字化賦能早已不是什么新鮮事&#xff0c;越來越多的行業和領域開始更大范圍去擁抱AI&#xff0c;享受科技帶來的變革力量&#xff0c;在我們之前的文章中也有很多相關領域項目的實踐經歷&#xff0c;本文的核心目標就是想要基于鋼鐵領域產品數據來開發構建…

Vue框架的element組件table文字居中

1、代碼展示 <el-table:data"table.data.slice((table.currentPage - 1) * table.limit, table.currentPage * table.limit)"style"width: 100%; margin-top: 15px"border:header-cell-style"{ textAlign: center }":cell-style"{textAl…

【KMP算法】學習總結

說明&#xff1a; 文章內容為對KMP算法的總結&#xff0c;以及力扣例題&#xff1b;文章內容為個人的學習總結&#xff0c;如有錯誤&#xff0c;歡迎指正。 文章目錄 1. KMP算法1.1 算法步驟1.2 關于指針回退問題 2 . LeetCode例題 1. KMP算法 1.1 算法步驟 KMP算法通常用于…

springboot_vue知識點

代碼放到了倉庫。 springboot_vue知識點 1.搭建1.vue2.springboot 2.前后端請求和響應的封裝1.請求封裝2.響應封裝 3.增刪改查1.查詢2.分頁3.新增和編輯4.刪除 4.跨域和自定義異常5.JWT鑒權1.配置pom2.攔截前端請求的攔截器3.生成token并驗證token4.登錄后生成token5.前端獲取…

git如何查看配置,修改配置,設置配置

# 顯示當前的Git配置 $ git config --list# 編輯Git配置文件 $ git config -e [--global]# 設置提交代碼時的用戶信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]"

Grafana如何實現折線柱狀圖

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一份大廠面試資料《史上最全大廠面試題》&#xff0c;Springboot、微服務、算法、數據結構、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、數據庫等等 …

競賽選題 車位識別車道線檢測 - python opencv

0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度學習 機器視覺 車位識別車道線檢測 該項目較為新穎&#xff0c;適合作為競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f947;學長這里給一個題目綜合評分(每項滿分5分) …

從六個方面對比Go和Python的差異

您是否想過 Go 與 Python 之間的主要區別是什么&#xff1f;隨著對軟件開發人員的需求不斷增加&#xff0c;選擇哪種編碼語言可能會很困難。 ? 在此&#xff0c;我們將從六個方面對比Go和Python,探討 Go 和 Python之間的差異。我們將討論它們的特點、優缺點&#xff0c;以便…

GPT、GPT-2、GPT-3論文精讀筆記

視頻&#xff1a;GPT&#xff0c;GPT-2&#xff0c;GPT-3 論文精讀【論文精讀】_嗶哩嗶哩_bilibili MAE論文&#xff1a;把bert用回計算機視覺領域 CLIP論文&#xff1a;打通文本和圖像 GPT 論文&#xff1a;Improving Language Understanding by Generative Pre-Training …

史詩級云故障敲響警鐘,應用保障不能沒有“連續鍵”!

近日&#xff0c;知名云服務商出現一次史詩級的云故障&#xff1a;全球所有區域/所有服務同時異常&#xff0c;故障持續長達3小時之多&#xff0c;云上眾多應用受到極大影響。 如今&#xff0c;在一個充滿不確定性和復雜性的數字化時代&#xff0c;哪怕是頂級云服務商亦不能避…

python-append與extend的區別

append 和 extend 是用于向列表&#xff08;List&#xff09;添加元素的兩種不同的方法&#xff0c;它們在功能上有一些重要的區別。 append 方法&#xff1a; append 方法用于在列表的末尾添加單個元素。語法&#xff1a;list.append(element)示例&#xff1a;my_list [1, 2,…

并行與分布式計算 第9章 算法設計

文章目錄 并行與分布式計算 第9章 算法設計9.1 設計過程9.1.1 PCAM設計過程9.1.2 劃分9.1.3 通信9.1.4 組合9.1.5 映射 8.2 設計方法8.2.1 劃分技術9.2.2 分治9.2.3 平衡樹技術9.2.4倍增技術9.2.5 流水線技術9.2.6 破對稱技術 并行與分布式計算 第9章 算法設計 9.1 設計過程 …

一張圖,了解美格智能高算力AI模組

美格智能高算力A模組&#xff0c;澎湃算力讓AI觸手可及&#xff01;

數字化背景下,集流體行業的智能制造方法論

行業背景 隨著全球對清潔能源需求的不斷增加&#xff0c;新能源領域正在迅速崛起&#xff0c;在新能源技術中&#xff0c;鋰電池作為一種高效、輕便的能量儲存解決方案&#xff0c;正成為主流。而鋰電集流體作為鋰電池的核心部件&#xff0c;承擔著電池內部電流分布的關鍵角色…

掌握Java關鍵字與面試技巧的完美結合!

問題&#xff1a;請說明什么是策略模式&#xff0c;并使用Java代碼舉例說明其使用場景和實現方式。 答案&#xff1a; 策略模式是一種行為型設計模式&#xff0c;它允許在運行時根據不同的情況選擇不同的算法或策略。它將每個可選的算法封裝成一個獨立的類&#xff0c;從而使得…

服務號可以遷移到訂閱號嗎

服務號和訂閱號有什么區別&#xff1f;服務號轉為訂閱號有哪些作用&#xff1f;首先我們要看一下服務號和訂閱號的主要區別。1、服務號推送的消息沒有折疊&#xff0c;消息出現在聊天列表中&#xff0c;會像收到消息一樣有提醒。而訂閱號推送的消息是折疊的&#xff0c;“訂閱號…

RHEL 8.6 Kubespray 1.23.1 install kubernetes v1.27.7

文章目錄 1. 預備條件配置網卡download01 節點安裝 nerdctl3. download01 節點 介質下載4. bastion01節點配置 yum 源5. bastion01 離線安裝 nerdctl安裝l insecure registry配置鏡像入庫執行 set-all.sh7. bastion01 配置互信8. 啟動容器部署環境9. 部署前準備9.1 配置 extrac…

分布式篇---第二篇

系列文章目錄 文章目錄 系列文章目錄前言一、你知道哪些分布式事務解決方案?二、什么是二階段提交?三、什么是三階段提交?前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站,這篇文章男女通用,看懂了就去分享給你…

基于Pytorch框架多人多攝像頭摔倒跌倒墜落檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 深度學習在計算機視覺領域的應用已經取得了顯著的進展&#xff0c;特別是在多人多攝像頭場景下的摔倒跌倒檢測。通過…