javascript解析ajax返回的xml和json格式数据实例详解
本文实例讲述了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(); }
ps:这里再为大家提供几款关于xml与json操作的在线工具供大家参考使用:
在线xml/json互相转换工具:
在线格式化xml/在线压缩xml:
xml在线压缩/格式化工具:
在线json代码检验、检验、美化、格式化工具:
json在线格式化工具:
在线json压缩/转义工具:
更多关于javascript相关内容可查看本站专题:《javascript中ajax操作技巧总结》、《javascript操作xml文件技巧总结》、《javascript中json操作技巧总结》、《javascript错误与调试技巧总结》及《javascript数据结构与算法技巧总结》
希望本文所述对大家javascript程序设计有所帮助。