Ajax入門(與Java服務器交互)(三)——解析XML數據、使用級聯下拉選擇框

使用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();
	}
	
}


發佈了41 篇原創文章 · 獲贊 30 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章