ajax 请求xml格式数据的省市联动

<%@ page language="java"  pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>级联菜单</title>
        <script type="text/javascript" src="./xmFile.js"> </script>
    </head>
    <body>
     <select id="province" name="province">
       <option value="">请选择....</option>
     </select>
     <select id="city" name="city">
        <option value="">请选择.....</option>
     </select>
  </body>
</html>

window.onload = function(){
    var xhr = ajaxFunction();

    xhr.onreadystatechange = function(){
        if(xhr.readyState==4){
            if(xhr.status==200){
                var docXml = xhr.responseXML;       //获取xml格式的数据
                //alert(docXml);        //打印的是object类型,说明已经不是字符串

                var provinceXmlElements = docXml.getElementsByTagName("province");

                for(var i=0;i<provinceXmlElements.length;i++){
                    var provinceXmlElement = provinceXmlElements[i];

                    var provinceXmlValue = provinceXmlElement.getAttribute("name");

                    /*
                     * <select id="province" name="province">
                           <option value="">请选择....</option>
                         </select>
                     */
                    var optionElement = document.createElement("option");
                    optionElement.setAttribute("value",provinceXmlValue);
                    var provinceText = document.createTextNode(provinceXmlValue);
                    optionElement.appendChild(provinceText);

                    var provinceElement = document.getElementById("province");
                    provinceElement.appendChild(optionElement);

                }

                //处理页面中第二个下拉选与处理页面中第一个下拉选的内容是没有关系的,所以不能放置在遍历省份里面

                document.getElementById("province").onchange = function(){
                    //1 获取页面中选中的省份
                    var provinceValue = this.value;

                    //清空
                    /*
                     * <select id="city" name="city">
                            <option value="">请选择.....</option>
                         </select>
                     */
                    var cityElement = document.getElementById("city");
                    var optionsOld = cityElement.getElementsByTagName("option");
                    for(var z=1;z<optionsOld.length;){
                        cityElement.removeChild(optionsOld[z]);
                    }

                    //2 遍历解析后的省份
                    for(var i=0;i<provinceXmlElements.length;i++){
                        var provinceXmlElement = provinceXmlElements[i];

                        var provinceXmlValue = provinceXmlElement.getAttribute("name");

                        //3 作对比
                        if(provinceValue==provinceXmlValue){
                            //4 获取对应省份里的所有城市信息
                            var cityXmlElements = provinceXmlElement.getElementsByTagName("city");

                            for(var j=0;j<cityXmlElements.length;j++){
                                var cityXmlElement = cityXmlElements[j];

                                var cityXmlValue = cityXmlElement.firstChild.nodeValue;

                                //5 放置到页面的第二个下拉选中
                                /*
                                 * <select id="city" name="city">
                                        <option value="">请选择.....</option>
                                     </select>
                                 */
                                var optionElement = document.createElement("option");
                                optionElement.setAttribute("value",cityXmlValue);
                                var cityText = document.createTextNode(cityXmlValue);
                                optionElement.appendChild(cityText);

                                cityElement.appendChild(optionElement);

                            }
                        }
                    }
                }
            }
        }
    }

    xhr.open("post","../XmlFileServlet?timeStamp="+new Date().getTime(),true);

    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    xhr.send(null);
}

function ajaxFunction(){
   var xmlHttp;
   try{ // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e){
       try{// Internet Explorer
             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
          }
        catch (e){
          try{
             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (e){}
          }
    }

    return xmlHttp;
 }
package com.cc.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 XmlFileServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //响应的数据格式是xml格式,设置ContentType成text/xml
        response.setContentType("text/xml;charset=utf-8");
        PrintWriter out = response.getWriter();

        //xml格式的数据,并不是xml文件
        out.println("<china>");
        out.println("<province name='吉林省'>");
        out.println("<city>长春</city>");
        out.println("<city>吉林市</city>");
        out.println("<city>四平</city>");
        out.println("<city>松原</city>");
        out.println("<city>通化</city>");
        out.println("</province>");

        out.println("<province name='辽宁省'>");
        out.println("<city>沈阳</city>");
        out.println("<city>大连</city>");
        out.println("<city>鞍山</city>");
        out.println("<city>抚顺</city>");
        out.println("<city>铁岭</city>");
        out.println("</province>");

        out.println("<province name='山东省'>");
        out.println("<city>济南</city>");
        out.println("<city>青岛</city>");
        out.println("<city>威海</city>");
        out.println("<city>烟台</city>");
        out.println("<city>潍坊</city>");
        out.println("</province>");
        out.println("</china>");

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
省市联动XML <?xml version="1.0" encoding="utf-8"?> <china> <province name="北京"> <city>东城区</city> <city>西城区</city> <city>崇文区</city> <city>宣武区</city> <city>朝阳区</city> <city>丰台区</city> <city>石景山区</city> <city>海淀区</city> <city>门头沟区</city> <city>房山区</city> <city>通州区</city> <city>顺义区</city> <city>昌平区</city> <city>大兴区</city> <city>怀柔区</city> <city>平谷区</city> <city>密云县</city> <city>延庆县</city> </province> <province name="天津"> <city>和平区</city> <city>河东区</city> <city>河西区</city> <city>南开区</city> <city>河北区</city> <city>红桥区</city> <city>塘沽区</city> <city>汉沽区</city> <city>大港区</city> <city>东丽区</city> <city>西青区</city> <city>津南区</city> <city>北辰区</city> <city>武清区</city> <city>宝坻区</city> <city>宁河县</city> <city>静海县</city> <city>蓟县</city> </province> <province name="河北"> <city>石家庄</city> <city>唐山</city> <city>秦皇岛</city> <city>邯郸</city> <city>邢台</city> <city>保定</city> <city>张家口</city> <city>承德</city> <city>沧州</city> <city>廊坊</city> <city>衡水</city> </province> <province name="山西"> <city>太原</city> <city>大同</city> <city>阳泉</city> <city>长治</city> <city>晋城</city> <city>朔州</city> <city>晋中</city> <city>运城</city> <city>忻州</city> <city>临汾</city> <city>吕梁</city> </province> <province name="内蒙古"> <city>呼和浩特</city> <city>包头</city> <city>乌海</city> <city>赤峰</city> <city>通辽</city> <city>鄂尔多斯</city> <city>呼伦贝尔</city> <city>巴彦淖尔</city> <city>乌兰察布</city> <city>兴安盟</city> <city>锡林郭勒盟</city> <city>阿拉善盟</city> </province> <province name="辽宁"> <city>沈阳</city> <city>大连</city> <city>鞍山</city> <city>抚顺</city> <city>本溪</city> <city>丹东</city> <city>锦州</city> <city>营口</city> <city>阜新</city> <city>辽阳</city> <city>盘锦</city> <city>铁岭</city> <city>朝阳</city> <city>葫芦岛</city> </province> <province name="吉林"> <city>长春</city> <city>吉林</city> <city>四平</city> <city>辽源</city> <city>通化</city> <city>白山</city> <city>松原</city> <city>白城</city> <city>延边</city> </province> <province name="黑龙江"> <city>哈尔滨</city> <city>齐齐哈尔</city> <city>鸡西</city> <city>鹤岗</city> <city>双鸭山</city> <city>大庆</city> <city>伊春</city> <city>佳木斯</city> <city>七台河</city> <city>牡丹江</city> <city>黑河</city> <city>绥化</city> <city>大兴安岭</city> </province> <province name="上海"> <city>黄浦区</city> <city>卢湾区</city> <city>徐汇区</city> <city>长宁区</city> <city>静安区</city> <city>普陀区</city> <city>闸北区</city> <city>虹口区</city> <city>杨浦区</city> <city>闵行区</city> <city>宝山区</city> <city>嘉定区</city> <city>浦东新区</city> <city>金山区</city> <city>松江区</city> <city>青浦区</city> <city>南汇区</city> <city>奉贤区</city> <city>崇明县</city> </province> <province name="江苏"> <city>南京</city> <city>无锡</city> <city>徐州</city> <city>常州</city> <city>苏州</city> <city>南通</city> <city>连云港</city> <city>淮安</city> <city>盐城</city> <city>扬州</city> <city>镇江</city> <city>泰州</city> <city>宿迁</city> </province> <province name="浙江"> <city>杭州</city> <city>宁波</city> <city>温州</city> <city>嘉兴</city> <city>湖州</city> <city>绍兴</city> <city>金华</city> <city>衢州</city> <city>舟山</city> <city>台州</city> <city>丽水</city> </province> <province name="安徽"> <city>合肥</city> <city>芜湖</city> <city>蚌埠</city> <city>淮南</city> <city>马鞍山</city> <city>淮北</city> <city>铜陵</city> <city>安庆</city> <city>黄山</city> <city>滁州</city> <city>阜阳</city> <city>宿州</city> <city>巢湖</city> <city>六安</city> <city>亳州</city> <city>池州</city> <city>宣城</city> </province> <province name="福建"> <city>福州</city> <city>厦门</city> <city>莆田</city> <city>三明</city> <city>泉州</city> <city>漳州</city> <city>南平</city> <city>龙岩</city> <city>宁德</city> </province> <province name="江西"> <city>南昌</city> <city>景德镇</city> <city>萍乡</city> <city>九江</city> <city>新余</city> <city>鹰潭</city> <city>赣州</city> <city>吉安</city> <city>宜春</city> <city>抚州</city> <city>上饶</city> </province> <province name="山东"> <city>济南</city> <city>青岛</city> <city>淄博</city> <city>枣庄</city> <city>东营</city> <city>烟台</city> <city>潍坊</city> <city>济宁</city> <city>泰安</city> <city>威海</city> <city>日照</city> <city>莱芜</city> <city>临沂</city> <city>德州</city> <city>聊城</city> <city>滨州</city> <city>荷泽</city> </province> <province name="河南"> <city>郑州</city> <city>开封</city> <city>洛阳</city> <city>平顶山</city> <city>安阳</city> <city>鹤壁</city> <city>新乡</city> <city>焦作</city> <city>濮阳</city> <city>许昌</city> <city>漯河</city> <city>三门峡</city> <city>南阳</city> <city>商丘</city> <city>信阳</city> <city>周口</city> <city>驻马店</city> </province> <province name="湖北"> <city>武汉</city> <city>黄石</city> <city>十堰</city> <city>宜昌</city> <city>襄樊</city> <city>鄂州</city> <city>荆门</city> <city>孝感</city> <city>荆州</city> <city>黄冈</city> <city>咸宁</city> <city>随州</city> <city>恩施</city> <city>神农架</city> </province> <province name="湖南"> <city>长沙</city> <

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值