js使用xml数据载体实现城市省份二级联动效果


Posted in Javascript onNovember 08, 2017

本文实例为大家分享了使用xml数据载体实现城市省份二级联动的具体代码,供大家参考,具体内容如下

首先写好前台页面testProvince.jsp,将请求通过open、send发送到服务器

<%@ 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%>" rel="external nofollow" > 
 <title>二级联动</title> 
 <meta http-equiv="pragma" content="no-cache"> 
 <meta http-equiv="cache-control" content="no-cache"> 
 <meta http-equiv="expires" content="0">  
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
 <meta http-equiv="description" content="This is my page"> 
 <style type="text/css"> 
  select{ 
   width:111px; 
  } 
 </style> 
 </head> 
 
 <body> 
  <select id="provinceID"> 
  <option>选择省份</option> 
  <option>湖南</option> 
  <option>广东</option> 
  </select> 
    
  <select id="cityID"> 
   <option>选择城市</option> 
  </select> 
 </body> 
 <script type="text/javascript"> 
  //创建ajax对象 
  function createAjax(){ 
   var ajax = null; 
   try{ 
    ajax = new ActiveXObject("microsoft.xmlhttp"); 
   }catch(e){ 
    try{ 
     ajax = new XMLHttpRequest(); 
    }catch(e1){ 
     alert("请更换浏览器"); 
    } 
   } 
   return ajax; 
  } 
 </script> 
 
 <script type="text/javascript"> 
  document.getElementById("provinceID").onchange = function(){ 
   //清空城市除了第一项 
   var cityElem = document.getElementById("cityID"); 
   cityElem.options.length = 1; 
    
   //获取选中的省份 
   var province = this.value; 
   //进行编码处理 
   province = encodeURI(province); 
   if("选择省份" != province){ 
    var ajax = createAjax(); 
    //提交方式为GET 
    var method = "GET"; 
    //提交路径为servlet路径 
    var url = "${pageContext.request.contextPath}/ProvinceServlet?time=" + new Date().getTime()+ 
      "&province=" +province; 
    //准备发送异步请求 
    ajax.open(method, url); 
    //由于是get请求,所以不需要设置请求头 
    //发送请求 
    ajax.send(null); 
     
    //监听服务器响应状态的变化 
    ajax.onreadystatechange = function(){ 
     //响应状态为4 表示ajax已经完全接受到服务器的数据了 
     if(ajax.readyState == 4){ 
      //接收到的数据正常 
      if(ajax.status == 200){ 
       //获取服务器传来的html数据 
       var xmlDocument = ajax.responseXML; 
       //进行dom操作解析xml 
       //解析xml数据 
       var citys = xmlDocument.getElementsByTagName("city"); 
       for(var i = 0; i< citys.length;i++){ 
        //获取xml中的值 :不能用innerHTML,要用nodeValue 
        var city = citys[i].firstChild.nodeValue; 
        //创建option 
        var optElement = document.createElement("option"); 
        optElement.innerHTML = city; 
        //获取city 
        var cityElems = document.getElementById("cityID"); 
        cityElems.appendChild(optElement); 
       } 
        
      } 
     } 
    } 
   } 
    
  } 
   
   
 </script> 
</html>

然后在后台ProvinceServlet中通过GET方式获取请求,将返回的数据以O(输出)流的方式发送出去,上面代码的ajax.responseXML获取输出的数据,并进行dom操作

public class ProvinceServlet extends HttpServlet { 
 @Override 
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
   throws ServletException, IOException { 
  req.setCharacterEncoding("utf-8"); 
  resp.setCharacterEncoding("utf-8"); 
  String province = req.getParameter("province"); 
  //重新编码 
  province = new String(province.getBytes("ISO-8859-1"),"utf-8"); 
  //设置格式为xml 
  resp.setContentType("text/xml;charset=utf-8"); 
  //获取字符输出流 
  PrintWriter pw = resp.getWriter(); 
  //拼接xml头 
  pw.write("<?xml version='1.0' encoding='UTF-8'?>"); 
  pw.write("<citys>"); 
  if ("湖南".equals(province)) { 
   pw.write("<city>长沙</city>"); 
   pw.write("<city>株洲</city>"); 
   pw.write("<city>湘潭</city>"); 
   pw.write("<city>岳阳</city>"); 
  }else if("广东".equals(province)){ 
   pw.write("<city>广州</city>"); 
   pw.write("<city>深圳</city>"); 
   pw.write("<city>中山</city>"); 
  } 
  pw.write("</citys>"); 
  pw.flush(); 
  pw.close(); 
 } 
}

运行结果如下:

js使用xml数据载体实现城市省份二级联动效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现获取服务器时间
May 19 Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
Vue 实现登录界面验证码功能
Jan 03 Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 Javascript
js实现聊天对话框
Feb 08 Javascript
Vue实现图片轮播组件思路及实例解析
May 11 Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 Javascript
vue和H5 draggable实现拖拽并替换效果
Jul 29 Javascript
React 高阶组件HOC用法归纳
Jun 13 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 #Javascript
javascript自定义事件功能与用法实例分析
Nov 08 #Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 #jQuery
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 #Javascript
手把手教你使用vue-cli脚手架(图文解析)
Nov 08 #Javascript
vue中实现滚动加载更多的示例
Nov 08 #Javascript
详解使用webpack打包编写一个vue-toast插件
Nov 08 #Javascript
You might like
php 中的str_replace 函数总结
2007/04/27 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python random模块常用方法
2014/11/03 Python
Python构造函数及解构函数介绍
2015/02/26 Python
使用Python绘制图表大全总结
2017/02/11 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
weblogic面试题
2016/03/07 面试题
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
运动会入场词50字
2014/02/20 职场文书
小学课外阅读总结
2014/07/09 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
储备店长岗位职责
2015/04/14 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
运动会新闻稿
2015/07/17 职场文书
三八节祝酒词
2015/08/11 职场文书
《绝招》教学反思
2016/02/20 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers