使用Ajax与后台服务器进行交互时,返回的数据并不是都是文本类型,也有xml类型、Jason类型等。
本篇文章主要讲解对返回的xml类型数据进行解析。
示例解析:
我们要做到示例是,有两个下拉选框,第一个下拉框是省份,第二个是所选省下相对应的市。当省份改变时,相对应的市也应改变。例如,当选择广东省时,地区项应包括:广州、深圳、佛山、汕头。
示例图示:
源代码:
jsp页面文件:
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'select.jsp' starting page</title>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <script type="text/javascript">
- <!--
- var xmlHttp;
- function createXmlHttp() {
- if(window.XMLHttpRequest) {
- xmlHttp = new XMLHttpRequest();
- } else if(window.ActiveXObject) {
- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
- }
- function updateSelect() {
- var selected = document.getElementById("slt1").value;
- createXmlHttp();
- xmlHttp.onreadystatechange = processor;
- var url = "createXml?selected=" + selected;
- xmlHttp.open("POST",url,true);
- xmlHttp.send(null);
- }
- function processor() {
- var result;
- if(xmlHttp.readyState == 4) {
- if(xmlHttp.status == 200) {
- //注意此处是xmlHttp.responseXML而不是xmlHttp.responseText
- //获取节点名为city的所有节点
- result = xmlHttp.responseXML.getElementsByTagName("city");
- var slt2 = document.getElementById("slt2");
- //将二级下拉框中的所有选项清空
- while(slt2.options.length>0) {
- slt2.removeChild(slt2.childNodes[0]);
- }
- //根据返回节点数目构造下拉选项
- for(var i=0; i<result.length; i++) {
- var option = document.createElement("option");
- //根据节点名称获取城市名称,并赋值
- option.text = result[i].getElementsByTagName("cityname")[0].firstChild.nodeValue;
- //根据节点名称获取城市值,并赋值
- option.value = result[i].getElementsByTagName("cityvalue")[0].firstChild.nodeValue;
- //千万不要忘记将该节点加入到下拉框父节点中
- slt2.options.add(option);
- }
- }
- }
- }
- -->
- </script>
- </head>
- <body>
- <form>
- 省份:
- <select id="slt1" onChange="updateSelect()">
- <option value="1">河南省</option>
- <option value="2">广东省</option>
- </select>
- 地区:
- <select id="slt2">
- <option>请选择地方</option>
- <option value="1">濮阳</option>
- <option value="2">安阳</option>
- <option value="3">南阳</option>
- <option value="4">郑州</option>
- </select>
- </form>
- </body>
- </html>
Servlet源代码:
- package com.zyh.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class CreateXml extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //这里一定要设置为xml类型的文件,而不是text/html
- response.setContentType("text/xml;charset=utf-8");
- response.setCharacterEncoding("utf-8");
- String selected = request.getParameter("selected");
- PrintWriter out = response.getWriter();
- out.println("<response>");
- if(selected.equals("1")) {
- out.println("<city>");
- out.println("<cityname>濮阳</cityname>");
- out.println("<cityvalue>1</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>安阳</cityname>");
- out.println("<cityvalue>2</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>南阳</cityname>");
- out.println("<cityvalue>3</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>郑州</cityname>");
- out.println("<cityvalue>4</cityvalue>");
- out.println("</city>");
- } else {
- out.println("<city>");
- out.println("<cityname>广州</cityname>");
- out.println("<cityvalue>1</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>深圳</cityname>");
- out.println("<cityvalue>2</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>佛山</cityname>");
- out.println("<cityvalue>3</cityvalue>");
- out.println("</city>");
- out.println("<city>");
- out.println("<cityname>汕头</cityname>");
- out.println("<cityvalue>4</cityvalue>");
- out.println("</city>");
- }
- out.println("</response>");
- out.flush();
- out.close();
- }
- }