ajax使用之二级联动(省市)

5 篇文章 0 订阅

ajax经常用于二级联动,实现的效果如下:


前台显示代码:

<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>省市二级联动</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript" src="${pageContext.request.contextPath}/util.js"></script>
	<script type="text/javascript">
		
		var xmlDoc;
		window.οnlοad=function(){
			
			//发出异步请求
			var xhr = getXHR();
			xhr.onreadystatechange=function(){
				if(xhr.readyState==4){
					if(xhr.status==200){
						xmlDoc = xhr.responseXML;
						
						//给省份赋值:XML DOM和HTML DOM
						//-------------------------------------
						//1、解析XML文档,得到所有的province元素
						var xmlProvinces = xmlDoc.getElementsByTagName("province");
						//2、遍历province元素,得到他的属性code 和name的值
						for(var i=0;i<xmlProvinces.length;i++){
							var codeValue = xmlProvinces[i].getAttribute("code");
							var nameValue = xmlProvinces[i].getAttribute("name");
							//alert(codeValue+":"+nameValue);
							//3、创建HTML中的option对象,给id=p1的元素添加子元素
							var o = new Option(nameValue,codeValue);//HTML DOM
							document.getElementById("p1").add(o);
						}
						
					}
				}
			}
			xhr.open("GET","AjaxDemo4"+"?=time"+new Date().getTime());
			xhr.send(null);
			
		}
		//省份的变化,引起城市的变化
		function selectCity(provinceObj){
			//取到当前的选项的值
			var selectValue = provinceObj.value;
			//清除城市下拉内容
			document.getElementById("c1").length=1;
			//遍历xml文档中的省份元素,比对code的值
			var xmlProvinces = xmlDoc.getElementsByTagName("province");
			for(var i=0;i<xmlProvinces.length;i++){
				//找到了:把他的子元素city取出来
				if(selectValue == xmlProvinces[i].getAttribute("code")){
					var xmlCitys = xmlProvinces[i].getElementsByTagName("city");
					//给HTML中的city下拉选择添加option
					for(var j=0;j<xmlCitys.length;j++){
						var o = new Option(xmlCitys[j].getAttribute("name"),xmlCitys[j].getAttribute("code"));//HTML DOM
						document.getElementById("c1").add(o);
					}
				}
				
			}
		}
	</script>
  </head>
  
  <body>
	省份:<select id="p1" οnchange="selectCity(this)">
		<option value="">--请选择--</option>
	</select>
	城市:<select id="c1">
		<option value="">--请选择--</option>
	</select>
  </body>
</html></span>
后台servlet代码:

<span style="font-size:18px;">package com.levi.servletajax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




import com.levi.domain.City;
import com.levi.domain.Province;
import com.thoughtworks.xstream.XStream;

public class AjaxDemo4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		List<Province> provinces = new ArrayList<Province>();
		Province sd = new Province(37, "山东省");
		Province hb = new Province(42, "湖北省");
		Province hn = new Province(41, "河南省");
		
		sd.getCitys().add(new City(01, "济南市"));
		sd.getCitys().add(new City(02, "青岛市"));
		sd.getCitys().add(new City(03, "淄博市"));
		
		hb.getCitys().add(new City(01, "武汉市"));
		hb.getCitys().add(new City(02, "黄冈市"));
		hb.getCitys().add(new City(03, "襄阳市"));
		
		hn.getCitys().add(new City(01, "郑州市"));
		hn.getCitys().add(new City(02, "开封市"));
		hn.getCitys().add(new City(03, "洛阳市"));
		
		provinces.add(sd);
		provinces.add(hb);
		provinces.add(hn);
		
		XStream xs = new XStream();
		xs.autodetectAnnotations(true);//使用注解生成别名
		xs.alias("provinces", List.class);
		String xml = xs.toXML(provinces);
		
		//输出xml文件
		response.setContentType("text/xml;charset=UTF-8");
		response.getWriter().write(xml);
	}

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

}
</span>

其中用到了xstream-1.3.1.jar这个第三方包(在javabean和xml之间转换)。其中获得XMLHttpRequest对象的函数封装在了util.js里面

<span style="font-size:18px;">/**
 * 得到XMLHttpRequest对象
 */
function getXHR(){
	var xmlHttp;
	try {
		xmlHttp=new XMLHttpRequest();
	}catch(e)
	{
		try{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				alert("你的浏览器不支持ajax");
				return false;
			}
			
		}
		
	}
	return xmlHttp;
}</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值