成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? jQuery解析返回的xml和json方法詳解
全站頭部文字 我要出現在這里
jQuery解析返回的xml和json方法詳解 723 2024-02-06   

本文實例講述了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() 等方法進行轉化。

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

在線XML/JSON互相轉換工具:
http://tools.gimoo.net/code/xmljson

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

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

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

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

在線json壓縮/轉義工具:
http://tools.gimoo.net/code/json_yasuo_trans

更多關于jQuery相關內容感興趣的讀者可查看本站專題:《jQuery操作xml技巧總結》、《jQuery操作json數據技巧匯總》、《jquery中Ajax用法總結》、《jQuery擴展技巧總結》、《jQuery常用插件及用法總結》、《jQuery常見經典特效匯總》及《jquery選擇器用法總結》

希望本文所述對大家jQuery程序設計有所幫助。



主站蜘蛛池模板: 车震电影| 远景山谷 (1981)中字| va电影| 还珠格格演员表| 浪客剑心星霜篇| hugh grant| 赛虎| 女同性视频| 永远的乳房 电影| 香谱七十二法图大全| 误判电影什么时候上映| 电影《白月光》在线观看免费| 雷牧| 王子文个人资料| 青春之放纵作文免费阅读| 伦理电影在线看| 晚上吃什么减肥| 电影在线观看高清完整版免费| 柏欣彤广场舞开档| 帕兰妮·琳帕缇雅空| 德兰| 365黑| 琅琊榜3第三部免费播放| 让我听懂你的语言歌词| 今日航班一览表| 凯登克罗斯| 江西省高中生综合素质自我评价| 红领章电视剧免费播放| 绝顶五秒前在线观看| 程慕轩| ab变频器中文说明书| 南海风云捕鱼| 战无双| 小学生数独入门100题| 电影百度百科| 《遇见你之后》电影在线观看| 孤掷一注在线观看| 勇士之门 电影| 夜夜做新郎| 野性的呼唤巴克原版| 超越天堂菲律宾|

?。。≌鹃L長期在線接!??!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103