版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第AJAX實(shí)現(xiàn)JSON與XML數(shù)據(jù)交換方法詳解目錄1、JS中如何創(chuàng)建和訪問(wèn)JSON對(duì)象2、基于JSON的數(shù)據(jù)交換3、基于XML的數(shù)據(jù)交換
1、JS中如何創(chuàng)建和訪問(wèn)JSON對(duì)象
(1)在javascript語(yǔ)言中怎么創(chuàng)建一個(gè)json對(duì)象,語(yǔ)法是什么?
屬性名:屬性值,屬性名:屬性值.........的格式!
注意:屬性值的數(shù)據(jù)類型隨意;可能是數(shù)字,可能是布爾類型,可能是字符串,可能是數(shù)組,也可能是一個(gè)json對(duì)象.....
!DOCTYPEhtml
htmllang="en"
head
metacharset="UTF-8"
titleTitle/title
/head
body
scripttype="text/javascript"
//先創(chuàng)建一個(gè)JSON對(duì)象
varaddress={
"city":"安徽",
"street":"城關(guān)鎮(zhèn)",
"zipcode":"123"
//另一個(gè)JSON對(duì)象
varuser={
"usercode":111,
"username":"zhangsan",
"sex":true,
"age":20,
"aihao":["抽煙","喝酒","燙頭"],
"addr":address
//上面就等價(jià)于
varuser={
"usercode":111,
"username":"zhangsan",
"sex":true,
"age":20,
"aihao":["抽煙","喝酒","燙頭"],
"addr":{
"usercode":111,
"username":"zhangsan",
"sex":true,
"age":20,
"aihao":["抽煙","喝酒","燙頭"],
"addr":address}
/script
/body
/html
(2)如何去訪問(wèn)json對(duì)象?主要有兩種方式:
第一種方式:使用.屬性名的方式
第二種方式:使用[屬性名]的方式
//第一種方式
console.log(address.city);
console.log(user.addr.street);
for(vari=0;iuser.aihao.length;i++){
console.log(user.aihao[i]);
//第二種方式
console.log(address["city"]);
console.log(user["sex"]"男":"女");
2、基于JSON的數(shù)據(jù)交換
(1)將JSON格式字符串轉(zhuǎn)換為JSON對(duì)象
我們知道從后端java程序中響應(yīng)回來(lái)的是字符串(json格式的字符串),那么你怎么把json格式的字符串轉(zhuǎn)換成json對(duì)象呢?主要有兩種方式:
JSON格式的字符串
varfromJavaServerJsonStr="{"usercode":111,"age":20}";
//\是轉(zhuǎn)義字符的作用,防止與外面的雙引號(hào)沖突
varfromJavaServerJsonStr="{\"usercode\":111,\"age\":20}";
第一種方式:使用eval函數(shù)
window.eval("varjsonobj1="+fromJavaServerJsonStr);
//進(jìn)行訪問(wèn)
alert(jsonobj1.usercode);//111
第二種方式:調(diào)用javascript語(yǔ)言中的內(nèi)置對(duì)象JSON的一個(gè)方法parse。
varjsonobj2=JSON.parse(fromJavaServerJsonStr);
alert(jsonobj2.age);//20
(2)基于JSON的數(shù)據(jù)交換
①對(duì)于后端,不在寫(xiě)html的代碼,只負(fù)責(zé)把數(shù)據(jù)以JSON格式的字符串返回;后端變輕松了。
②對(duì)于前端,負(fù)責(zé)把接收到的JSON格式的字符串轉(zhuǎn)換成JSON對(duì)象,并完成拼串的操作;前端變復(fù)雜了。
③整體上,后端只會(huì)出現(xiàn)后端的代碼,前端只會(huì)出現(xiàn)前端的代碼,便于維護(hù)!
第一種方式:對(duì)于靜態(tài)的字符串
后端得到靜態(tài)的數(shù)據(jù),不在拼接HTML程序(寫(xiě)前端代碼),只負(fù)責(zé)把數(shù)據(jù)響應(yīng)回去,拼接成JSON格式的字符串
StringBuilderhtml=newStringBuilder();
html.append("tr
html.append("td1/td
html.append("td王五/td
html.append("td20/td
html.append("td北京大興區(qū)/td
html.append("/tr
html.append("tr
html.append("td2/td
html.append("td李四/td
html.append("td22/td
html.append("td北京海淀區(qū)/td
html.append("/tr
//--------------------------------------------修改為
//將以上程序拼接HTML,換成拼接JSON格式的字符串。
StringjsonStr="[{\"name\":\"王五\",\"age\":20,\"addr\":\"北京大興區(qū)\"},{\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀區(qū)\"}]";
//響應(yīng)JSON格式的字符串給前端。
out.print(jsonStr);
前端不在直接拿后端拼好的字符串格式,而是拿到JSON格式的字符串進(jìn)行處理,在前端進(jìn)行拼串
document.getElementById("stutbody").innerHTML=this.responseText
//-----------------------------------修改為
//將json格式的字符串轉(zhuǎn)換成json對(duì)象
varstuList=JSON.parse(this.responseText);
//是一個(gè)數(shù)組,并且數(shù)組中有多個(gè)學(xué)生數(shù)據(jù)
varhtml=""
for(vari=0;istuList.length;i++){
varstu=stuList[i]
html+="tr"
html+="td"+(i+1)+"/td"
html+="td"++"/td"
html+="td"+stu.age+"/td"
html+="td"+stu.addr+"/td"
html+="/tr"
document.getElementById("stutbody").innerHTML=html
第二種方式:連接數(shù)據(jù)庫(kù)動(dòng)態(tài)拼接JSON字符串
①創(chuàng)建數(shù)據(jù)庫(kù)表
②后端連接數(shù)據(jù)庫(kù),拼接成JSON格式的字符串
packagecom.bjpowernode.javaweb.ajax;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.sql.*;
*@Author:朗朗乾坤
*@Package:com.bjpowernode.javaweb.ajax
*@Project:ajax
*@name:AjaxRequest5Servlet
*@Date:2025/12/617:13
@WebServlet("/ajaxrequest5")
publicclassAjaxRequest5ServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//響應(yīng)到瀏覽器
response.setContentType("text/html;charset=UTF-8");
PrintWriterout=response.getWriter();
//用于拼接成JSON的字符串
StringBufferjson=newStringBuffer();
Stringjsonobj="";
//連接數(shù)據(jù)庫(kù)
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
try{
//注冊(cè)驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
//獲取連接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernodeuseUnicode=truecharacterEncoding=utf8serverTimezone=UTC","root","123");
//獲取預(yù)編譯的數(shù)據(jù)庫(kù)操作對(duì)象
Stringsql="selectname,age,addrfromt_student";
ps=conn.prepareStatement(sql);
//執(zhí)行sql
rs=ps.executeQuery();
//處理查詢結(jié)果集
json.append("[");
while(rs.next()){//每循環(huán)一次,就拼接一次
Stringname=rs.getString("name");
Stringage=rs.getString("age");
Stringaddr=rs.getString("addr");
//拼成JSON格式的字符串對(duì)象,每次循環(huán)拼接的格式如下
//{"name":"王五","age":20,"addr":"北京大興區(qū)"},
json.append("{\"name\":\"");
json.append(name);
json.append("\",\"age\":");
json.append(age);
json.append(",\"addr\":\"");
json.append(addr);
json.append("\"},");
//上面這樣拼接,最后一個(gè)JSON格式的對(duì)象會(huì)多一個(gè)逗號(hào),所以進(jìn)行截串
jsonobj=json.substring(0,json.length()-1)+"]";
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}finally{
//釋放資源
if(rs!=null){
try{
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
if(ps!=null){
try{
ps.close();
}catch(SQLExceptione){
e.printStackTrace();
if(conn!=null){
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
//響應(yīng)JSON格式的字符串給前端
out.print(jsonobj);
}
③前端對(duì)JSON格式的字符串進(jìn)行處理,然后拼串
!DOCTYPEhtml
htmllang="en"
head
metacharset="UTF-8"
title發(fā)送AJAX請(qǐng)求,顯示學(xué)生列表/title
/head
body
scripttype="text/javascript"
window.onload=function(){
document.getElementById("btn").onclick=function(){
//1.創(chuàng)建核心對(duì)象
varxhr=newXMLHttpRequest();
//2.注冊(cè)回調(diào)函數(shù)
xhr.onreadystatechange=function(){
if(this.readyState==4){
if(this.status==200){
//document.getElementById("mybody").innerHTML=this.responseText
//將json格式的字符串轉(zhuǎn)換成json對(duì)象
varstuList=JSON.parse(this.responseText)
//是一個(gè)數(shù)組,并且數(shù)組中有多個(gè)學(xué)生數(shù)據(jù)
varhtml=""
for(vari=0;istuList.length;i++){
varstu=stuList[i]
html+="tr"
html+="td
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 緊固件鐓鍛工操作規(guī)范評(píng)優(yōu)考核試卷含答案
- 集成電路管殼制造工誠(chéng)信測(cè)試考核試卷含答案
- 凹版制版員崗前常識(shí)考核試卷含答案
- 井下水采工常識(shí)能力考核試卷含答案
- 拖拉機(jī)電器裝試工成果轉(zhuǎn)化水平考核試卷含答案
- 沼氣物管員標(biāo)準(zhǔn)化競(jìng)賽考核試卷含答案
- 磁記錄材料涂布工安全實(shí)操競(jìng)賽考核試卷含答案
- 酒店員工績(jī)效目標(biāo)設(shè)定與考核制度
- 酒店客房鑰匙卡遺失備案制度
- 蠟微粉及特種粉體技術(shù)改造項(xiàng)目環(huán)境影響報(bào)告表
- 2026年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)集裝箱物流行業(yè)市場(chǎng)發(fā)展數(shù)據(jù)監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 中小學(xué)人工智能教育三年發(fā)展規(guī)劃(2026-2028)7500字完整方案目標(biāo)務(wù)實(shí)真能落地
- 七年級(jí)地理下冊(cè)(人教版)東半球其他的國(guó)家和地區(qū)-歐洲西部自然環(huán)境教學(xué)設(shè)計(jì)
- 口腔現(xiàn)場(chǎng)義診培訓(xùn)
- 學(xué)校中層管理崗位職責(zé)及分工明細(xì)(2026年版)
- 江蘇省南京市六校聯(lián)合體2026屆高一數(shù)學(xué)第一學(xué)期期末監(jiān)測(cè)試題含解析
- 莆田春節(jié)習(xí)俗介紹
- 就業(yè)部門(mén)內(nèi)控制度
- 2026屆江蘇省徐州市侯集高級(jí)中學(xué)高一上數(shù)學(xué)期末復(fù)習(xí)檢測(cè)試題含解析
- 抗洪搶險(xiǎn)先進(jìn)事跡2023
- 鋁材廠煲模作業(yè)指導(dǎo)書(shū)
評(píng)論
0/150
提交評(píng)論