AJAX淺析數(shù)據(jù)交換的實(shí)現(xiàn)
基于JSON的數(shù)據(jù)交換
前端
前端接收到來(lái)自后端的JSON格式的字符串以后,需要將字符串轉(zhuǎn)換為JSON對(duì)象:
var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
// 第一種方法
var jsonObj = JSON.parse(jsonStr)
// 第二種方法
var jsonObj = eval('(' + jsonStr + ')')
第二種方法中加括號(hào)的原因是:
加圓括號(hào)的目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式(expression)轉(zhuǎn)化為對(duì)象,而不是作為語(yǔ)句(statement)來(lái)執(zhí)行。舉一個(gè)例子,例如對(duì)象字面量{},如若不加外層的括號(hào),那么eval會(huì)將大括號(hào)識(shí)別為JavaScript代碼塊的開始和結(jié)束標(biāo)記,那么{}將會(huì)被認(rèn)為是執(zhí)行了一句空語(yǔ)句。
后端
后端需要將需要傳給前端的數(shù)據(jù)拼接成JSON格式的字符串。一個(gè)一個(gè)拼接太麻煩,我們選擇使用阿里巴巴的fastjson組件,它可以將java對(duì)象轉(zhuǎn)換成json格式的字符串
List<Student> studentList = new ArrayList<>();
while (rs.next()) {
// 取出數(shù)據(jù)
String name = rs.getString("name");
int age = rs.getInt("age");
String addr = rs.getString("addr");
// 將以上數(shù)據(jù)封裝成Student對(duì)象
Student s = new Student(name, age, addr);
// 將Student對(duì)象放到List集合
studentList.add(s);
}
// 將List集合轉(zhuǎn)換成json字符串
jsonStr = JSON.toJSONString(studentList);
// 響應(yīng)JSON格式的字符串給前端。
out.print(jsonStr);基于XML的數(shù)據(jù)交換
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用XML完成數(shù)據(jù)交換</title>
</head>
<body>
<script type="text/javascript">
window.onload = function(){
document.getElementById("btn").onclick = function(){
// 1.創(chuàng)建XMLHTTPRequest對(duì)象
var xhr = new XMLHttpRequest();
// 2.注冊(cè)回調(diào)函數(shù)
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
// 使用XMLHTTPRequest對(duì)象的responseXML屬性,接收返回之后,可以自動(dòng)封裝成document對(duì)象(文檔對(duì)象)
var xmlDoc = this.responseXML
//console.log(xmlDoc)
// 獲取所有的<student>元素,返回了多個(gè)對(duì)象,應(yīng)該是數(shù)組。
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.發(fā)送請(qǐng)求
xhr.send()
}
}
</script>
<button id="btn">顯示學(xué)生列表</button>
<table width="500px" border="1px">
<thead>
<tr>
<th>序號(hào)</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數(shù)據(jù)的方式不再是調(diào)用XMLHttpRequest對(duì)象的responseText屬性,而是調(diào)用responseXML屬性。
然后再通過(guò)getElementsByTagName方法獲得標(biāo)簽進(jìn)行遍歷拼接。
后端
如果服務(wù)器響應(yīng)的是XML數(shù)據(jù)的話,那么Servlet中的
response.setContentType("text/html;charset=UTF-8");需要換成
response.setContentType("text/xml;charset=UTF-8");至于XML數(shù)據(jù)字符串串的拼接這里不贅述了。
亂碼問(wèn)題
對(duì)于tomcat10來(lái)說(shuō),關(guān)于字符集,我們程序員不需要干涉,不會(huì)出現(xiàn)亂碼。
對(duì)于tomcat9及以下版本來(lái)說(shuō)呢?
響應(yīng)中文的時(shí)候,會(huì)出現(xiàn)亂碼,怎么解決?
response.setContentType("text/html;charset=UTF-8");發(fā)送ajax post請(qǐng)求的時(shí)候,發(fā)送給服務(wù)器的數(shù)據(jù),服務(wù)器接收之后亂碼,怎么解決?
request.setCharacterEncoding("UTF-8");到此這篇關(guān)于AJAX淺析數(shù)據(jù)交換的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)AJAX數(shù)據(jù)交換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入淺析AjaxFileUpload實(shí)現(xiàn)單個(gè)文件的 Ajax 文件上傳庫(kù)
jQuery.AjaxFileUpload.js是一款jQuery插件,用于通過(guò)ajax上傳文件。本文給大家介紹AjaxFileUpload實(shí)現(xiàn)單個(gè)文件的 Ajax 文件上傳庫(kù),對(duì)此感興趣的朋友一起學(xué)習(xí)吧2016-04-04
Ajax實(shí)現(xiàn)靜態(tài)刷新頁(yè)面過(guò)程帶加載旋轉(zhuǎn)圖片
當(dāng)然你也可以使用jquery或者ajax寫動(dòng)態(tài)加載table的方式來(lái)實(shí)現(xiàn),方式多種多樣,感興趣的朋友可以了解下,希望本文提供的靜態(tài)刷新頁(yè)面對(duì)你學(xué)習(xí)ajax有所幫助2013-02-02
ajax詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了ajax詳解,詳細(xì)的介紹了Ajax 簡(jiǎn)史以及 基本用法,有興趣的可以了解一下2017-07-07
AJAX實(shí)現(xiàn)簡(jiǎn)單的注冊(cè)頁(yè)面異步請(qǐng)求實(shí)例代碼
下面小編就為大家?guī)?lái)一篇AJAX實(shí)現(xiàn)簡(jiǎn)單的注冊(cè)頁(yè)面異步請(qǐng)求實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
使用AJAX進(jìn)行WEB應(yīng)用程序開發(fā)的方法
AJAX,一個(gè)異步JavaScript和XML的縮略詞,是最近出來(lái)的技術(shù)詞語(yǔ)。異步意味著你可以經(jīng)由超文本傳輸協(xié)議(HTTP)向一個(gè)服務(wù)器發(fā)出請(qǐng)求并且在等待該響應(yīng)時(shí)繼續(xù)處理另外的數(shù)據(jù)。2010-04-04
Ajax向后臺(tái)傳json格式的數(shù)據(jù)出現(xiàn)415錯(cuò)誤的原因分析及解決方法
ajax往后臺(tái)傳json格式數(shù)據(jù)報(bào)415錯(cuò)誤,什么原因?qū)е碌哪?,該怎么解決呢?下面腳本之家小編給大家?guī)?lái)了Ajax向后臺(tái)傳json格式的數(shù)據(jù)出現(xiàn)415錯(cuò)誤的原因分析及解決方法感興趣的朋友一起看看吧2016-10-10

