欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript解析ajax返回的xml和json格式數(shù)據(jù)實例詳解

 更新時間:2017年01月05日 10:32:23   作者:QH_JAVA  
這篇文章主要介紹了javascript解析ajax返回的xml和json格式數(shù)據(jù),結(jié)合實例形式詳細(xì)分析了JS ajax調(diào)用及返回值中xml與json格式數(shù)據(jù)的處理技巧,需要的朋友可以參考下

本文實例講述了javascript解析ajax返回的xml和json格式數(shù)據(jù)。分享給大家供大家參考,具體如下:

寫個例子,以備后用

一、JavaScript 解析返回的xml格式的數(shù)據(jù):

1、javascript版本的ajax發(fā)送請求

(1)、創(chuàng)建XMLHttpRequest對象,這個對象就是ajax請求的核心,是ajax請求和響應(yīng)的信息載體,單是不同瀏覽器創(chuàng)建方式不同
(2)、請求路徑
(3)、使用open方法綁定發(fā)送請求
(4)、使用send() 方法發(fā)送請求
(5)、獲取服務(wù)器返回的字符串   xmlhttpRequest.responseText;
(6)、獲取服務(wù)端返回的值,以xml對象的形式存儲  xmlhttpRequest.responseXML;
(7)、使用W3C DOM節(jié)點(diǎn)樹方法和屬性對該XML文檔對象進(jìn)行檢查和解析。

2、 實例:

(1)、發(fā)送ajax請求,以及解析返回的數(shù)據(jù)

<script type="text/javascript">
/* js版本發(fā)送ajax請求 */
function tellxml(){
 // 創(chuàng)建對象,適合于firefox 和safari
 var xmlhttpRequest= new XMLHttpRequest();
 // 創(chuàng)建對象,適合于ie
 // var xmlhttpRequest=new ActiveXObject("Msxml2.XMLHTTP");
 // 請求發(fā)送路徑 url
 var url="http://localhost:18080/servlet/Servlet1?aa=10";
 // Open方法綁定一個發(fā)送過程,但不發(fā)送數(shù)據(jù)。Open方法最后一個參數(shù)為true時表示異步,否則同步
 xmlhttpRequest.open("POST",url,true);
 // Send方法就是發(fā)送請求數(shù)據(jù)
 xmlhttpRequest.send(url);
 // readstate 就是一個xmlhttprequest 對象的一個屬性,來記錄服務(wù)器返回的狀態(tài)
 var readstate =xmlhttpRequest.readyState;
 alert("狀態(tài):"+readstate);
 // status 就是發(fā)送請求的狀態(tài),如果是200 則說明請求響應(yīng)成功
 var status=xmlhttpRequest.status;
 alert("請求發(fā)送結(jié)果"+status);
 // "responseText”是xmlhttpRequest的一個屬性,來以字符串形式存儲HTTP響應(yīng)值;“responseXML”屬性是以XML形式來記錄HTTP響應(yīng)的值。
 var text= xmlhttpRequest.responseText;
 alert(text);
 // “responseXML”是xmlhttpRequest的一個屬性,是以XML文檔的對象來存儲服務(wù)器端返回的值,可以使用W3C DOM節(jié)點(diǎn)樹方法和屬性對該XML文檔對象進(jìn)行檢查和解析。
 var xml= xmlhttpRequest.responseXML;
 var values=xml.getElementsByTagName("info");
 alert("值"+values);
 alert("長度"+values.length);
 // 解析獲取內(nèi)容
 for(var i=0;i<values.length;i++){
 var name1=values[i].getElementsByTagName("name")[0].firstChild.data;
 alert(name1);
 }
};
</script>

(2)、servlet 接受ajax 請求:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 String aaa= request.getParameter("aa");
 System.out.print("ajax 數(shù)據(jù):"+aaa);
 // 向客戶端響應(yīng)信息
 response.setCharacterEncoding("GBK");
 response.setContentType("text/xml");
 PrintWriter out= response.getWriter();
 out.print("<?xml version=\"1.0\" encoding=\"GBK\"?>");
 out.println("<infos>");
 out.println("<info>");
 out.println("<name>"+"name1"+"</name>");
 out.println("<age>"+12+"</age>");
 out.println("<name>"+"name2"+"</name>");
 out.println("<age>"+22+"</age>");
 out.println("</info>");
 out.println("<info>");
 out.println("<name>"+"name11"+"</name>");
 out.println("<age>"+112+"</age>");
 out.println("<name>"+"name22"+"</name>");
 out.println("<age>"+222+"</age>");
 out.println("</info>");
 out.println("</infos>");
}

二、JavaScript 解析返回的json格式的數(shù)據(jù):注意這里獲取的是responseText 而不是responseXML也就是字符串而不是xml對象,因為返回的是json

1、發(fā)送請求,并解析返回的json格式的數(shù)據(jù)(這里返回的是json 對象的格式)

<script type="text/javascript">
/* js 解析返回的格式為 json */
function telljson(){
 // 創(chuàng)建 xmlhttpRequest 對象
 var xmlhttpRequest= new XMLHttpRequest();
 //請求URL
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // 將請求過程綁定到 open 方法
 xmlhttpRequest.open("POST",url,true);
 // 發(fā)送請求
 xmlhttpRequest.send(url);
 // readstate 就是一個xmlhttprequest 對象的一個屬性用來記錄服務(wù)端響應(yīng)的狀態(tài)
 var readstate =xmlhttpRequest.readyState;
 alert("請求準(zhǔn)備狀態(tài):"+readstate);
 // status 服務(wù)器執(zhí)行的狀態(tài)
 var status=xmlhttpRequest.status;
 alert("請求發(fā)送結(jié)果"+status);
 // responseText 對象為xmlhttpRequest 對象的一個屬性,用來以字符串的方式存儲服務(wù)器端返回的值。
 var text= xmlhttpRequest.responseText;
 alert("json text: "+text);
 // 獲取json 返回值
 // 那邊傳的是json對象的格式的一個字符串,在前臺首先將字符串轉(zhuǎn)化為一個json格式的js對象
 var json= eval("("+text+")");
 // 通過eval() 方法將json格式的字符串轉(zhuǎn)化為js對象,并進(jìn)行解析獲取內(nèi)容
 alert("age:"+json.age+"age1:"+json.age1);
};
</script>

2、servlet 接受請求,并返回數(shù)據(jù)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // 向ajax 返回json格式的數(shù)據(jù)
  String aaa= request.getParameter("aa");
  System.out.print("ajax 數(shù)據(jù):"+aaa);
  // 向客戶端響應(yīng)信息
  response.setCharacterEncoding("GBK");
  response.setContentType("text/json");
  PrintWriter out= response.getWriter();
  // 這里組裝json對象的格式,并轉(zhuǎn)化為json格式的字符串返回。
  String stu="{age:12,age1:23,age2:33}";
  out.print(stu);
  out.flush();
  out.close();
}

三、JavaScript 解析返回的json數(shù)組格式的數(shù)據(jù):

1、發(fā)送ajax請求

<script type="text/javascript">
/* js 解析返回的格式為 json */
function telljson(){
 // 創(chuàng)建xmlhttpRequest對象
 var xmlhttpRequest= new XMLHttpRequest();
 //請求url
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // open 方法綁定請求路徑
 xmlhttpRequest.open("POST",url,true);
 // 發(fā)送ajax請求
 xmlhttpRequest.send(url);
 // readstate 就是一個xmlhttprequest 對象的一個屬性用來記錄服務(wù)器返回的狀態(tài)信息
 var readstate =xmlhttpRequest.readyState;
 alert("請求準(zhǔn)備狀態(tài):"+readstate);
 // status 屬性用來記錄服務(wù)器返回的執(zhí)行狀態(tài)信息
 var status=xmlhttpRequest.status;
 alert("請求發(fā)送結(jié)果"+status);
 // responseText屬性用來以字符串方式存儲服務(wù)器端返回的數(shù)據(jù)
 var text= xmlhttpRequest.responseText;
 alert("json text: "+text);
 // 那邊傳的是json數(shù)組的格式,通過js的eval() 方法將json數(shù)組格式的字符串轉(zhuǎn)化為js數(shù)組
 var json= eval("("+text+")");
 // 解析這個js數(shù)組,獲取數(shù)值
 var age=json[0].age;
 var age1=json[0].age1;
 var age2=json[0].age2;
 alert("age:"+age+"age1"+age1+"age2"+age2);
};
</script>

四、ajax  XMLHttpRequest 對象的三個屬性以及open 和send方法:

(1)onreadystatechange 屬性

onreadystatechange 屬性存有處理服務(wù)器響應(yīng)的函數(shù)。下面的代碼定義一個空的函數(shù),可同時對 onreadystatechange 屬性進(jìn)行設(shè)置:

xmlHttp.onreadystatechange=function()
{
// 我們需要在這里寫一些代碼
}

(2)readyState 屬性

readyState 屬性存有服務(wù)器響應(yīng)的狀態(tài)信息。每當(dāng) readyState 改變時,onreadystatechange 函數(shù)就會被執(zhí)行。

這是 readyState 屬性可能的值:

狀態(tài) 描述
0 請求未初始化(在調(diào)用 open() 之前)
1 請求已提出(調(diào)用 send() 之前)
2 請求已發(fā)送(這里通??梢詮捻憫?yīng)得到內(nèi)容頭部)
3 請求處理中(響應(yīng)中通常有部分?jǐn)?shù)據(jù)可用,但是服務(wù)器還沒有完成響應(yīng))
4 請求已完成(可以訪問服務(wù)器響應(yīng)并使用它)

xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
 {
 // 從服務(wù)器的response獲得數(shù)據(jù)
 }
}

(3)responseText 屬性

可以通過 responseText 屬性來取回由服務(wù)器返回的數(shù)據(jù)。

在我們的代碼中,我們將把時間文本框的值設(shè)置為等于 responseText:

xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
 {
 document.myForm.time.value=xmlHttp.responseText;
 }
}

另外:

AJAX - 向服務(wù)器發(fā)送一個請求

要想把請求發(fā)送到服務(wù)器,我們就需要使用 open() 方法和 send() 方法。

open() 方法需要三個參數(shù):

第一個參數(shù)定義發(fā)送請求所使用的方法(GET 還是 POST)。

與 POST 相比,GET 更簡單也更快,并且在大部分情況下都能用。

然而,在以下情況中,請使用 POST 請求:

① 無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)
② 向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)
③ 發(fā)送包含未知字符的用戶輸入時,POST 比 GET 更穩(wěn)定也更可靠

第二個參數(shù)規(guī)定服務(wù)器端腳本的 URL(該文件可以是任何類型的文件,比如 .txt 和 .xml,或者服務(wù)器腳本文件,比如 .asp 和 .php (在傳回響應(yīng)之前,能夠在服務(wù)器上執(zhí)行任務(wù)))。

第三個參數(shù)規(guī)定應(yīng)當(dāng)對請求進(jìn)行異步地處理(true(異步)或 false(同步))。

send() 方法可將請求送往服務(wù)器。如果我們假設(shè) HTML 文件和 ASP 文件位于相同的目錄,那么代碼是這樣的:

xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);

五、之前的實例都沒有使用 XMLHttpRequest 對象的onreadystatechange 這個屬性,下面看看這個屬性的實例:

1、onreadystatechange  這個屬性在前面也說了,就是在XMLHttpRequest 這個對象的 readyState  這個值改變的時候會執(zhí)行。

2、發(fā)送ajax請求并解析

<script type="text/javascript">
/* js 解析返回的格式為 json */
function telljson(){
 // 創(chuàng)建對象,適合于firefox 和safari
 var xmlhttpRequest= new XMLHttpRequest();
 //請求發(fā)送路徑 url
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // Open方法綁定一個發(fā)送過程,但不發(fā)送數(shù)據(jù)。Open方法最后一個參數(shù)為true時表示異步,否則同步
 xmlhttpRequest.open("POST",url,true);
 // Send方法就是發(fā)送請求數(shù)據(jù)
 xmlhttpRequest.send(url);
 //onreadystatechange 屬性存有處理服務(wù)器響應(yīng)的函數(shù)
 xmlhttpRequest.onreadystatechange =function(){
 //readyState 屬性存有服務(wù)器響應(yīng)的狀態(tài)信息。每當(dāng) readyState 改變時,onreadystatechange 函數(shù)就會被執(zhí)行。
  alert("狀態(tài)改變了:"+xmlhttpRequest.readyState);
  // 如果是4 請求已完成(可以訪問服務(wù)器響應(yīng)并使用它)
  if(xmlhttpRequest.readyState==4){
  var readstate =xmlhttpRequest.readyState;
  alert("請求準(zhǔn)備狀態(tài):"+readstate);
  var status=xmlhttpRequest.status;
  alert("請求發(fā)送結(jié)果"+status);
  // "responseText”是xmlhttpRequest的一個屬性,來以字符串形式存儲HTTP響應(yīng)值;“responseXML”屬性是以XML形式來記錄HTTP響應(yīng)的值。
  var text= xmlhttpRequest.responseText;
  alert("json text: "+text);
  // 獲取json 返回值
  // 那邊傳的是json數(shù)組的格式,這邊解析后就是一個json數(shù)組
  var json= eval("("+text+")");
  var age=json[0].age;
  var age1=json[0].age1;
  var age2=json[0].age2;
  alert("age:"+age+"age1"+age1+"age2"+age2);
  }
 }
};
</script>

3、servlet返回的數(shù)據(jù)

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 // 向ajax 返回json格式的數(shù)據(jù)
 String aaa = request.getParameter("aa");
 System.out.print("ajax 數(shù)據(jù):" + aaa);
 // 向客戶端響應(yīng)信息
 response.setCharacterEncoding("GBK");
 response.setContentType("text/json");
 PrintWriter out = response.getWriter();
 // 這里使用 json 數(shù)組的格式
 String stu = "[{age:12,age1:23,age2:33}]";
 out.print(stu);
 out.flush();
 out.close();
}

PS:這里再為大家提供幾款關(guān)于xml與json操作的在線工具供大家參考使用:

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson

在線格式化XML/在線壓縮XML
http://tools.jb51.net/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress

在線JSON代碼檢驗、檢驗、美化、格式化工具:
http://tools.jb51.net/code/json

JSON在線格式化工具:
http://tools.jb51.net/code/jsonformat

在線json壓縮/轉(zhuǎn)義工具:
http://tools.jb51.net/code/json_yasuo_trans

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript中ajax操作技巧總結(jié)》、《JavaScript操作XML文件技巧總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • 微信小程序如何保證每個頁面都已經(jīng)登陸詳解

    微信小程序如何保證每個頁面都已經(jīng)登陸詳解

    前段時間發(fā)布了一個微信小程序的簡單登錄,但遇到一個問題,怎么確保用戶每個頁面都已經(jīng)登陸了呢,這篇文章主要給大家介紹了關(guān)于微信小程序如何保證每個頁面都已經(jīng)登陸的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 基于require.js的使用(實例講解)

    基于require.js的使用(實例講解)

    下面小編就為大家?guī)硪黄趓equire.js的使用(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JavaScript 用cloneNode方法克隆節(jié)點(diǎn)的代碼

    JavaScript 用cloneNode方法克隆節(jié)點(diǎn)的代碼

    很多時候我們需要通過HTML DOM 的方式,用JavaScript 動態(tài)生成很多相同的節(jié)點(diǎn),包括其子節(jié)點(diǎn)
    2012-10-10
  • 微信小程序自定義modal彈窗組件的方法詳解

    微信小程序自定義modal彈窗組件的方法詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序自定義modal彈窗組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • JS桶排序的簡單理解與實現(xiàn)方法示例

    JS桶排序的簡單理解與實現(xiàn)方法示例

    這篇文章主要介紹了JS桶排序的簡單理解與實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了js桶排序的概念、原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下
    2019-11-11
  • JavaScript實現(xiàn)獲取圖片文件真實格式的示例代碼

    JavaScript實現(xiàn)獲取圖片文件真實格式的示例代碼

    每種格式的圖片,都有自己特有的優(yōu)缺點(diǎn)以及數(shù)據(jù)結(jié)構(gòu),本篇博文的目的就是基于不同格式的圖像二進(jìn)制數(shù)據(jù),獲取到圖片的真實格式,感興趣的可以了解一下
    2023-02-02
  • JavaScript基于replace+正則實現(xiàn)ES6的字符串模版功能

    JavaScript基于replace+正則實現(xiàn)ES6的字符串模版功能

    這篇文章主要介紹了JavaScript基于replace+正則實現(xiàn)ES6的字符串模版功能,結(jié)合實例形式分析了replace結(jié)合正則實現(xiàn)ES6字符串模板功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • javascript實現(xiàn)計算指定范圍內(nèi)的質(zhì)數(shù)示例

    javascript實現(xiàn)計算指定范圍內(nèi)的質(zhì)數(shù)示例

    這篇文章主要介紹了javascript實現(xiàn)計算指定范圍內(nèi)的質(zhì)數(shù),涉及javascript數(shù)值計算與判斷相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • js輪播圖的插件化封裝詳解

    js輪播圖的插件化封裝詳解

    這篇文章主要為大家詳細(xì)介紹了js輪播圖的插件化封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 插件:檢測javascript的內(nèi)存泄漏

    插件:檢測javascript的內(nèi)存泄漏

    插件:檢測javascript的內(nèi)存泄漏...
    2007-03-03

最新評論