Ajax入门(与Java服务器交互)(三)——解析XML数据、使用级联下拉选择框

本文介绍了一个使用Ajax从服务器获取XML格式数据,并实时更新网页下拉菜单内容的示例。通过选择不同的省份,对应的市会动态加载。

使用Ajax与后台服务器进行交互时,返回的数据并不是都是文本类型,也有xml类型、Jason类型等。

本篇文章主要讲解对返回的xml类型数据进行解析。

示例解析:

我们要做到示例是,有两个下拉选框,第一个下拉框是省份,第二个是所选省下相对应的市。当省份改变时,相对应的市也应改变。例如,当选择广东省时,地区项应包括:广州、深圳、佛山、汕头。

示例图示:


源代码:

jsp页面文件:

[java]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.     <title>My JSP 'select.jsp' starting page</title>  
  12.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  
  13.     <script type="text/javascript">  
  14.     <!--  
  15.     var xmlHttp;  
  16.     function createXmlHttp() {  
  17.         if(window.XMLHttpRequest) {  
  18.             xmlHttp = new XMLHttpRequest();  
  19.         } else if(window.ActiveXObject) {  
  20.             xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
  21.         }  
  22.     }  
  23.     function updateSelect() {  
  24.         var selected = document.getElementById("slt1").value;  
  25.         createXmlHttp();  
  26.         xmlHttp.onreadystatechange = processor;  
  27.         var url = "createXml?selected=" + selected;  
  28.         xmlHttp.open("POST",url,true);  
  29.         xmlHttp.send(null);  
  30.     }  
  31.     function processor() {  
  32.         var result;  
  33.         if(xmlHttp.readyState == 4) {  
  34.             if(xmlHttp.status == 200) {  
  35.                 //注意此处是xmlHttp.responseXML而不是xmlHttp.responseText  
  36.                 //获取节点名为city的所有节点  
  37.                 result = xmlHttp.responseXML.getElementsByTagName("city");  
  38.                 var slt2 = document.getElementById("slt2");  
  39.                 //将二级下拉框中的所有选项清空  
  40.                 while(slt2.options.length>0) {  
  41.                     slt2.removeChild(slt2.childNodes[0]);  
  42.                 }  
  43.                 //根据返回节点数目构造下拉选项  
  44.                 for(var i=0; i<result.length; i++) {  
  45.                     var option = document.createElement("option");  
  46.                     //根据节点名称获取城市名称,并赋值  
  47.                     option.text = result[i].getElementsByTagName("cityname")[0].firstChild.nodeValue;  
  48.                     //根据节点名称获取城市值,并赋值  
  49.                     option.value = result[i].getElementsByTagName("cityvalue")[0].firstChild.nodeValue;  
  50.                     //千万不要忘记将该节点加入到下拉框父节点中  
  51.                     slt2.options.add(option);  
  52.                 }  
  53.             }  
  54.         }  
  55.     }  
  56.     -->  
  57.     </script>  
  58.   </head>  
  59.     
  60.   <body>  
  61.   <form>  
  62.       省份:  
  63.       <select id="slt1" onChange="updateSelect()">  
  64.           <option value="1">河南省</option>  
  65.           <option value="2">广东省</option>  
  66.       </select>  
  67.       地区:  
  68.       <select id="slt2">  
  69.           <option>请选择地方</option>  
  70.           <option value="1">濮阳</option>  
  71.           <option value="2">安阳</option>  
  72.           <option value="3">南阳</option>  
  73.           <option value="4">郑州</option>  
  74.       </select>  
  75.   </form>  
  76.   </body>  
  77. </html>  

Servlet源代码:

[java]  view plain  copy
  1. package com.zyh.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class CreateXml extends HttpServlet {  
  12.   
  13.     @Override  
  14.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.         //这里一定要设置为xml类型的文件,而不是text/html  
  17.         response.setContentType("text/xml;charset=utf-8");  
  18.         response.setCharacterEncoding("utf-8");  
  19.         String selected = request.getParameter("selected");  
  20.         PrintWriter out = response.getWriter();  
  21.         out.println("<response>");  
  22.         if(selected.equals("1")) {  
  23.             out.println("<city>");  
  24.             out.println("<cityname>濮阳</cityname>");  
  25.             out.println("<cityvalue>1</cityvalue>");  
  26.             out.println("</city>");  
  27.             out.println("<city>");  
  28.             out.println("<cityname>安阳</cityname>");  
  29.             out.println("<cityvalue>2</cityvalue>");  
  30.             out.println("</city>");  
  31.             out.println("<city>");  
  32.             out.println("<cityname>南阳</cityname>");  
  33.             out.println("<cityvalue>3</cityvalue>");  
  34.             out.println("</city>");  
  35.             out.println("<city>");  
  36.             out.println("<cityname>郑州</cityname>");  
  37.             out.println("<cityvalue>4</cityvalue>");  
  38.             out.println("</city>");  
  39.         } else {  
  40.             out.println("<city>");  
  41.             out.println("<cityname>广州</cityname>");  
  42.             out.println("<cityvalue>1</cityvalue>");  
  43.             out.println("</city>");  
  44.             out.println("<city>");  
  45.             out.println("<cityname>深圳</cityname>");  
  46.             out.println("<cityvalue>2</cityvalue>");  
  47.             out.println("</city>");  
  48.             out.println("<city>");  
  49.             out.println("<cityname>佛山</cityname>");  
  50.             out.println("<cityvalue>3</cityvalue>");  
  51.             out.println("</city>");  
  52.             out.println("<city>");  
  53.             out.println("<cityname>汕头</cityname>");  
  54.             out.println("<cityvalue>4</cityvalue>");  
  55.             out.println("</city>");  
  56.         }  
  57.         out.println("</response>");  
  58.         out.flush();  
  59.         out.close();  
  60.     }  
  61.       
  62. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值