網站首頁 編程語言 正文
基于JSON的數據交換
前端
前端接收到來自后端的JSON格式的字符串以后,需要將字符串轉換為JSON對象:
var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
// 第一種方法
var jsonObj = JSON.parse(jsonStr)
// 第二種方法
var jsonObj = eval('(' + jsonStr + ')')
第二種方法中加括號的原因是:
加圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執行了一句空語句。
后端
后端需要將需要傳給前端的數據拼接成JSON格式的字符串。一個一個拼接太麻煩,我們選擇使用阿里巴巴的fastjson組件,它可以將java對象轉換成json格式的字符串
List<Student> studentList = new ArrayList<>();
while (rs.next()) {
// 取出數據
String name = rs.getString("name");
int age = rs.getInt("age");
String addr = rs.getString("addr");
// 將以上數據封裝成Student對象
Student s = new Student(name, age, addr);
// 將Student對象放到List集合
studentList.add(s);
}
// 將List集合轉換成json字符串
jsonStr = JSON.toJSONString(studentList);
// 響應JSON格式的字符串給前端。
out.print(jsonStr);
基于XML的數據交換
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用XML完成數據交換</title>
</head>
<body>
<script type="text/javascript">
window.onload = function(){
document.getElementById("btn").onclick = function(){
// 1.創建XMLHTTPRequest對象
var xhr = new XMLHttpRequest();
// 2.注冊回調函數
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
// 使用XMLHTTPRequest對象的responseXML屬性,接收返回之后,可以自動封裝成document對象(文檔對象)
var xmlDoc = this.responseXML
//console.log(xmlDoc)
// 獲取所有的<student>元素,返回了多個對象,應該是數組。
var students = xmlDoc.getElementsByTagName("student")
//console.log(students[0].nodeName)
var html = "";
for (var i = 0; i < students.length; i++) {
var student = students[i]
// 獲取<student>元素下的所有子元素
html += "<tr>"
html += "<td>"+(i+1)+"</td>"
var nameOrAge = student.childNodes
for (var j = 0; j < nameOrAge.length; j++) {
var node = nameOrAge[j]
if (node.nodeName == "name") {
//console.log("name = " + node.textContent)
html += "<td>"+node.textContent+"</td>"
}
if (node.nodeName == "age") {
//console.log("age = " + node.textContent)
html += "<td>"+node.textContent+"</td>"
}
}
html += "</tr>"
}
document.getElementById("stutbody").innerHTML = html
}else{
alert(this.status)
}
}
}
// 3.開啟通道
xhr.open("GET", "/ajax/ajaxrequest6?t=" + new Date().getTime(), true)
// 4.發送請求
xhr.send()
}
}
</script>
<button id="btn">顯示學生列表</button>
<table width="500px" border="1px">
<thead>
<tr>
<th>序號</th>
<th>姓名</th>
<th>年齡</th>
</tr>
</thead>
<tbody id="stutbody">
<!--<tr>
<td>1</td>
<td>zhangsan</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>lisi</td>
<td>22</td>
</tr>-->
</tbody>
</table>
</body>
</html>
這里要注意,我們接受XML數據的方式不再是調用XMLHttpRequest對象的responseText屬性,而是調用responseXML屬性。
然后再通過getElementsByTagName方法獲得標簽進行遍歷拼接。
后端
如果服務器響應的是XML數據的話,那么Servlet中的
response.setContentType("text/html;charset=UTF-8");
需要換成
response.setContentType("text/xml;charset=UTF-8");
至于XML數據字符串串的拼接這里不贅述了。
亂碼問題
對于tomcat10來說,關于字符集,我們程序員不需要干涉,不會出現亂碼。
對于tomcat9及以下版本來說呢?
響應中文的時候,會出現亂碼,怎么解決?
response.setContentType("text/html;charset=UTF-8");
發送ajax post請求的時候,發送給服務器的數據,服務器接收之后亂碼,怎么解決?
request.setCharacterEncoding("UTF-8");
原文鏈接:https://blog.csdn.net/qq_52002412/article/details/126342795
相關推薦
- 2022-07-26 Python基礎之模塊詳解_python
- 2022-09-24 C++實現并優化異常系統_C 語言
- 2023-04-04 C/C++關于實現CAN信號的獲取方法_C 語言
- 2023-07-05 uni-app處理請求發送表單類型的數據
- 2023-06-21 Python生成元組和字典的方法_python
- 2022-09-24 利用Python編寫簡易的錄制屏幕小工具_python
- 2022-06-07 關于python調用c++動態庫dll時的參數傳遞問題_C 語言
- 2022-11-19 Django項目中表的查詢的操作_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支