jQuery解析返回的xml和json方法详解


Posted in Javascript onJanuary 05, 2017

本文实例讲述了jQuery解析返回的xml和json方法。分享给大家供大家参考,具体如下:

一、jQuery 解析ajax请求返回的xml格式的数据

1、发送ajax请求

<script type="text/JavaScript">
function jqxml(){
 $.ajax({
  url:"http://localhost:18080/servlet/Servlet1",
   // 请求方式
  type:"post",
  // 服务器返回的数据的格式,常用的有 text/xml/json
  dataType:"xml",
  data:{age:1212},
  success:function(data){
   // 这里获取的data就是一个xml对象,这个对象可以按照dom树格式来解析
   var name=$(data).find("infos").find("info").each(function(){
    alert($(this).find("name").text());
    alert($(this).find("age").text());
   });
  },
  error:function (edata){
   alert(edata);
  }
 });
};
</script>

2、servlet 端返回的值

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  String aaa= request.getParameter("age");
  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("</info>");
  out.println("<info>");
  out.println("<name>"+"name11"+"</name>");
  out.println("<age>"+112+"</age>");
  out.println("</info>");
  out.println("</infos>");
}

二、jquery 解析返回的json 格式的数据,这里是返回的json对象格式,如果返回的是json数组格式,就是js数组,所以按照js数组获取

1、ajax 请求以及解析过程

<script type="text/javascript">
function jqxml(){
 $.ajax({
  url:"http://localhost:18080/servlet/Servlet3",
   // 请求方式
  type:"post",
  // 服务器返回的数据的格式,常用的有 text/xml/json
  dataType:"json",
  data:{age:1212},
  success:function(data){
  // 通过eval() 函数将字符串转化为js对象,如果返回的是json对象则eval() 函数不处理,如果返回的是json字符串则进行转化
  // 注意这样写有时有问题,因为已经在ajax中定义了返回的是json对象而在使用eval() 来转化就有可能报错,所以要吗把json 换成text要吗把eval去了直接使用data
  var json= eval("("+data+")");
    var age1=json.age;
    var name1=json.name;
   alert(age1+""+name1);
  },
  error:function (edata){
   alert(edata);
  }
 });
};
</script>

2、 servlet 返回的json格式数据

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
  // 向ajax 返回json格式的数据
  String aaa = request.getParameter("age");
  System.out.print("ajax 数据:" + aaa);
  // 向客户端响应信息
  response.setCharacterEncoding("GBK");
  response.setContentType("text/json");
  PrintWriter out = response.getWriter();
  // 这里使用 json 对象的格式
  String stu = "{age:12,name:name12}";
  out.print(stu);
  out.flush();
  out.close();
}

注意:在使用ajax请求返回 json 数据的时候遇到了如下的问题:

1、后台返回的是json 格式的字符串:

String stu = "{\"age\":\"12\",\"name\":\"whd\"}";

大家看到这些转义字符,会问 干嘛写这么麻烦,看看就知道: jquery 1.4以后对json格式变严格了

也就是说必须要这种格式的

{"键":"值","键":"值"};

像原来的

{键:值,键:值}
{'键':'值','键':'值'}

这种都是错误的,不合标准,所以jquery返回error

2、这个问题要注意,我自己 写这篇文章 时上面的那些代码都是没问题的后来使用发现有问题了,问题是什么那:

① 、使用ajax请求后台返回json格式的字符串,之前在ajax请求的dataType="json" 时 返回的数据使用 eval("("++")") 来转化没问题,之前也有注释解释说:

通过eval() 函数将字符串转化为js对象,如果返回的是json对象则eval() 函数不处理,如果返回的是json字符串则进行转化,但现在的情况是如果dataType="json"则eval() 就报错。而可以直接使用success:function(data) 中的data 这个json对象。
② 、使用ajax请求后台返回json格式字符串,而如果dataType='text' 则需要使用eval() 来将 json格式的字符串转化为json 对象。
③ 、如果使用的是纯js 则返回的json字符串需要使用 eval() 来转化为json对象,而如果是jquery 等框架像 ajax中定义dataType="json" 这样的话在传递的过程中已经将json格式的字符串转化为了json 对象,就没必要使用eval() 来转化。

在贴吧中有人也问这样的问题,其中一个回答如下:

对于这个问题:“后台调用了jsonarray.fromobject (list集合)   是不是这样就是json对象了  前台就不要 eval 了”

首先说明这样不是json对象,返回的是一个json格式的字符串,如果你前端用的是纯js,就要eval一下,但如果有用到jq框架等,它会帮你自动转成json对象,就不用eval了。

注:eval方法不是转json对象的意思,而是将字符串转成可执行的js代码。
如:对于一个字符串“alert('hello world')",eval这个字符串就能执行了。

总结:

在后台返回的是json格式的字符串的前提下

如果前台获取的是 json格式的字符串则需要使用 eval() 或JSON.parse(str) 等方法将字符串转化为json 对象,其实也就是js对象

如果前台使用了jq等框架并定义了返回的数据类型,如ajax中如果定义dataType='json' 则后台数据传过来前台会自动转化为json对象即js对象  就不用我们使用eval() 等方法进行转化。

Javascript 相关文章推荐
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
值得学习的bootstrap fileinput文件上传工具
Nov 08 Javascript
node.js基于mongodb的搜索分页示例
Jan 22 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
微信小程序国际化探索实现(附源码地址)
May 20 Javascript
JavaScript中while循环的基础使用教程
Aug 11 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 #Javascript
jQuery实现动态文字搜索功能
Jan 05 #Javascript
JS实现HTML标签转义及反转义
Apr 14 #Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 #Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
Jan 05 #Javascript
如何提高Dom访问速度
Jan 05 #Javascript
AngularJS中run方法的巧妙运用
Jan 04 #Javascript
You might like
PHPlet在Windows下的安装
2006/10/09 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
基于initPHP的框架介绍
2013/04/18 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python是编译运行的验证方法
2015/01/30 Python
20招让你的Python飞起来!
2016/09/27 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
linux 下selenium chrome使用详解
2020/04/02 Python
python如何从键盘获取输入实例
2020/06/18 Python
Python 如何创建一个线程池
2020/07/28 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
数据保密承诺书
2014/06/03 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
幼儿园心得体会范文
2016/01/21 职场文书