javascript解析ajax返回的xml和json格式数据实例详解


Posted in Javascript onJanuary 05, 2017

本文实例讲述了javascript解析ajax返回的xml和json格式数据。分享给大家供大家参考,具体如下:

写个例子,以备后用

一、JavaScript 解析返回的xml格式的数据:

1、javascript版本的ajax发送请求

(1)、创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同
(2)、请求路径
(3)、使用open方法绑定发送请求
(4)、使用send() 方法发送请求
(5)、获取服务器返回的字符串   xmlhttpRequest.responseText;
(6)、获取服务端返回的值,以xml对象的形式存储  xmlhttpRequest.responseXML;
(7)、使用W3C DOM节点树方法和属性对该XML文档对象进行检查和解析。

2、 实例:

(1)、发送ajax请求,以及解析返回的数据

<script type="text/javascript">
/* js版本发送ajax请求 */
function tellxml(){
 // 创建对象,适合于firefox 和safari
 var xmlhttpRequest= new XMLHttpRequest();
 // 创建对象,适合于ie
 // var xmlhttpRequest=new ActiveXObject("Msxml2.XMLHTTP");
 // 请求发送路径 url
 var url="http://localhost:18080/servlet/Servlet1?aa=10";
 // Open方法绑定一个发送过程,但不发送数据。Open方法最后一个参数为true时表示异步,否则同步
 xmlhttpRequest.open("POST",url,true);
 // Send方法就是发送请求数据
 xmlhttpRequest.send(url);
 // readstate 就是一个xmlhttprequest 对象的一个属性,来记录服务器返回的状态
 var readstate =xmlhttpRequest.readyState;
 alert("状态:"+readstate);
 // status 就是发送请求的状态,如果是200 则说明请求响应成功
 var status=xmlhttpRequest.status;
 alert("请求发送结果"+status);
 // "responseText”是xmlhttpRequest的一个属性,来以字符串形式存储HTTP响应值;“responseXML”属性是以XML形式来记录HTTP响应的值。
 var text= xmlhttpRequest.responseText;
 alert(text);
 // “responseXML”是xmlhttpRequest的一个属性,是以XML文档的对象来存储服务器端返回的值,可以使用W3C DOM节点树方法和属性对该XML文档对象进行检查和解析。
 var xml= xmlhttpRequest.responseXML;
 var values=xml.getElementsByTagName("info");
 alert("值"+values);
 alert("长度"+values.length);
 // 解析获取内容
 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 数据:"+aaa);
 // 向客户端响应信息
 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格式的数据:注意这里获取的是responseText 而不是responseXML也就是字符串而不是xml对象,因为返回的是json

1、发送请求,并解析返回的json格式的数据(这里返回的是json 对象的格式)

<script type="text/javascript">
/* js 解析返回的格式为 json */
function telljson(){
 // 创建 xmlhttpRequest 对象
 var xmlhttpRequest= new XMLHttpRequest();
 //请求URL
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // 将请求过程绑定到 open 方法
 xmlhttpRequest.open("POST",url,true);
 // 发送请求
 xmlhttpRequest.send(url);
 // readstate 就是一个xmlhttprequest 对象的一个属性用来记录服务端响应的状态
 var readstate =xmlhttpRequest.readyState;
 alert("请求准备状态:"+readstate);
 // status 服务器执行的状态
 var status=xmlhttpRequest.status;
 alert("请求发送结果"+status);
 // responseText 对象为xmlhttpRequest 对象的一个属性,用来以字符串的方式存储服务器端返回的值。
 var text= xmlhttpRequest.responseText;
 alert("json text: "+text);
 // 获取json 返回值
 // 那边传的是json对象的格式的一个字符串,在前台首先将字符串转化为一个json格式的js对象
 var json= eval("("+text+")");
 // 通过eval() 方法将json格式的字符串转化为js对象,并进行解析获取内容
 alert("age:"+json.age+"age1:"+json.age1);
};
</script>

2、servlet 接受请求,并返回数据

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // 向ajax 返回json格式的数据
  String aaa= request.getParameter("aa");
  System.out.print("ajax 数据:"+aaa);
  // 向客户端响应信息
  response.setCharacterEncoding("GBK");
  response.setContentType("text/json");
  PrintWriter out= response.getWriter();
  // 这里组装json对象的格式,并转化为json格式的字符串返回。
  String stu="{age:12,age1:23,age2:33}";
  out.print(stu);
  out.flush();
  out.close();
}

三、JavaScript 解析返回的json数组格式的数据:

1、发送ajax请求

<script type="text/javascript">
/* js 解析返回的格式为 json */
function telljson(){
 // 创建xmlhttpRequest对象
 var xmlhttpRequest= new XMLHttpRequest();
 //请求url
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // open 方法绑定请求路径
 xmlhttpRequest.open("POST",url,true);
 // 发送ajax请求
 xmlhttpRequest.send(url);
 // readstate 就是一个xmlhttprequest 对象的一个属性用来记录服务器返回的状态信息
 var readstate =xmlhttpRequest.readyState;
 alert("请求准备状态:"+readstate);
 // status 属性用来记录服务器返回的执行状态信息
 var status=xmlhttpRequest.status;
 alert("请求发送结果"+status);
 // responseText属性用来以字符串方式存储服务器端返回的数据
 var text= xmlhttpRequest.responseText;
 alert("json text: "+text);
 // 那边传的是json数组的格式,通过js的eval() 方法将json数组格式的字符串转化为js数组
 var json= eval("("+text+")");
 // 解析这个js数组,获取数值
 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 属性存有处理服务器响应的函数。下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行设置:

xmlHttp.onreadystatechange=function()
{
// 我们需要在这里写一些代码
}

(2)readyState 属性

readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。

这是 readyState 属性可能的值:

状态 描述
0 请求未初始化(在调用 open() 之前)
1 请求已提出(调用 send() 之前)
2 请求已发送(这里通常可以从响应得到内容头部)
3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
4 请求已完成(可以访问服务器响应并使用它)
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
 {
 // 从服务器的response获得数据
 }
}

(3)responseText 属性

可以通过 responseText 属性来取回由服务器返回的数据。

在我们的代码中,我们将把时间文本框的值设置为等于 responseText:

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

另外:

AJAX - 向服务器发送一个请求

要想把请求发送到服务器,我们就需要使用 open() 方法和 send() 方法。

open() 方法需要三个参数:

第一个参数定义发送请求所使用的方法(GET 还是 POST)。

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

① 无法使用缓存文件(更新服务器上的文件或数据库)
② 向服务器发送大量数据(POST 没有数据量限制)
③ 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

第二个参数规定服务器端脚本的 URL(该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务))。

第三个参数规定应当对请求进行异步地处理(true(异步)或 false(同步))。

send() 方法可将请求送往服务器。如果我们假设 HTML 文件和 ASP 文件位于相同的目录,那么代码是这样的:

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

五、之前的实例都没有使用 XMLHttpRequest 对象的onreadystatechange 这个属性,下面看看这个属性的实例:

1、onreadystatechange  这个属性在前面也说了,就是在XMLHttpRequest 这个对象的 readyState  这个值改变的时候会执行。

2、发送ajax请求并解析

<script type="text/javascript">
/* js 解析返回的格式为 json */
function telljson(){
 // 创建对象,适合于firefox 和safari
 var xmlhttpRequest= new XMLHttpRequest();
 //请求发送路径 url
 var url="http://localhost:18080/servlet/Servlet3?aa=10";
 // Open方法绑定一个发送过程,但不发送数据。Open方法最后一个参数为true时表示异步,否则同步
 xmlhttpRequest.open("POST",url,true);
 // Send方法就是发送请求数据
 xmlhttpRequest.send(url);
 //onreadystatechange 属性存有处理服务器响应的函数
 xmlhttpRequest.onreadystatechange =function(){
 //readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。
  alert("状态改变了:"+xmlhttpRequest.readyState);
  // 如果是4 请求已完成(可以访问服务器响应并使用它)
  if(xmlhttpRequest.readyState==4){
  var readstate =xmlhttpRequest.readyState;
  alert("请求准备状态:"+readstate);
  var status=xmlhttpRequest.status;
  alert("请求发送结果"+status);
  // "responseText”是xmlhttpRequest的一个属性,来以字符串形式存储HTTP响应值;“responseXML”属性是以XML形式来记录HTTP响应的值。
  var text= xmlhttpRequest.responseText;
  alert("json text: "+text);
  // 获取json 返回值
  // 那边传的是json数组的格式,这边解析后就是一个json数组
  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返回的数据

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 // 向ajax 返回json格式的数据
 String aaa = request.getParameter("aa");
 System.out.print("ajax 数据:" + aaa);
 // 向客户端响应信息
 response.setCharacterEncoding("GBK");
 response.setContentType("text/json");
 PrintWriter out = response.getWriter();
 // 这里使用 json 数组的格式
 String stu = "[{age:12,age1:23,age2:33}]";
 out.print(stu);
 out.flush();
 out.close();
}
Javascript 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
javascript预览上传图片发现的问题的解决方法
Nov 25 Javascript
Chrome中JSON.parse的特殊实现
Jan 12 Javascript
jQuery的ready方法详解
Nov 27 Javascript
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
Apr 06 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
Apr 27 Javascript
小程序中canvas的drawImage方法参数使用详解
Jul 04 Javascript
Javascript var变量删除原理及实现
Aug 26 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 #Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 #Javascript
JS实现给对象动态添加属性的方法
Jan 05 #Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 #Javascript
JavaScript实现数组降维详解
Jan 05 #Javascript
jQuery解析返回的xml和json方法详解
Jan 05 #Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 #Javascript
You might like
PHP中防止SQL注入实现代码
2011/02/19 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php生成随机数的三种方法
2014/09/10 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
jquery 选择器部分整理
2009/10/28 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
浅析Python迭代器的高级用法
2020/07/16 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
微观物理专业自荐信
2014/01/26 职场文书
某某同志考察材料
2014/05/28 职场文书
企业管理标语
2014/06/10 职场文书
装修施工安全责任书
2014/07/24 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers