Ajax下拉菜单联动

时间:2022-04-22 09:09:14

AJAX = Asynchronous + Javascript + xml

简直TMD是艺术


demo.html

<html>
	<head>
		<title>Ajax下拉列表</title>
		<meta charset="utf-8"/>
		<script>
			function getXhr() {
				var xhr = null;
				if(window.XMLHttpRequest) {
					xhr = new XMLHttpRequest();
				} else {
					xhr = new ActiveXObject("Microsoft.XMLHttp");
				}
				return xhr;
			}
			
			function change(province) {
				var cities = document.getElementById("cities");
				var xhr = getXhr();
				xhr.open("post", "getmenu.do");
				xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
				xhr.onreadystatechange = function() {
					if(xhr.readyState==4 && xhr.status==200) {
						var cities = xhr.responseText.split(",");
						var citiesNode = document.getElementById("cities");
						citiesNode.innerHTML = "";
						//console.log(cities);
						for(var city in cities) {
							var option = document.createElement("option");
							option.innerHTML = cities[city];
							citiesNode.appendChild(option);
						}
					}
				};
				xhr.send("province="+province);
				var citiesNode = document.getElementById("cities");
				
			}
			
		</script>
	</head>
	<body>
	省份:<select id="provinces" onchange="change(this.value);">
			<option value="sd">山东</option>
			<option value="js">江苏</option>
			<option value="hb">河北</option>
		</select>
	城市:<select id="cities"></select>
	</body>
</html>

MenuServlet.java

package 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 MenuServlet extends HttpServlet {

	@Override
	protected void service(
			HttpServletRequest req, 
			HttpServletResponse res)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		res.setContentType("text/html;charset=utf-8");
		PrintWriter out = res.getWriter();
		String province = req.getParameter("province");
		if("sd".equals(province)) {
			out.print("济南,青岛,泰安");
		} else if("js".equals(province)) {
			out.print("南京,苏州,无锡");
		} else if("hb".equals(province)) {
			out.print("石家庄,唐山,秦皇岛");
		}
		out.flush();
		out.close();
	}

}