AJAX经典应用之动态加载列表框

动态加载列表框在许多场景中都需要用到。

比如说当用户选择了某几项选项之后,会自动根据用户的选择来动态加载列表框。下面要讲的就是这样一个例子。


注意事项:

增加新的节点需要从下往上依次加进去

dynamicList.html

<!DOCTYPE html>
<html>
  <head>
    <title>Dynamic List Demo</title>
    <meta name="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript">
    var xhr ;
    function createXMLHttpRequest()
    {	
    	//ie浏览器
    	if(window.ActiveXObject)
    		{
    			xhr = new ActiveXObject("Microsoft.XMLHttp");
    		}
    	//非ie浏览器
    	else if(window.XMLHttpRequest)
    		{
    			xhr = new XMLHttpRequest();
    		}
    }
    function refreshModelList()
    {
    	var year = document.getElementById("modelYear").value;
    	var make = document.getElementById("make").value;
    	createXMLHttpRequest();
    	xhr.onreadystatechange = callback;
    	var url = "dynamicList?year="+year+"&make="+make+"&timeStamp="+new Date().getTime();
    	xhr.open("GET", url, true);
    	xhr.send(null);
    }
    function callback()
    {   	
    	if(xhr.readyState == 4)
    		{
    		if(xhr.status == 200)
    			{
    				updateList();
    			}
    		}
    }
    function updateList()
    {	
    	clearList();
    	//获得servlet中传送过来的XML中的model
    	var results = xhr.responseXML.getElementsByTagName("model");
    	//获得页面中的id为models对象
    	var models = document.getElementById("models");
    	var option = null;
    	for(var i=0;i<results.length;i++)
    		{	
    			//新建一个元素 
    			option = document.createElement("option");
    			//在这个元素增加孩子节点  textNode
    			option.appendChild(document.createTextNode(results[i].firstChild.nodeValue));
    			//将此节点加入到models中
    			models.appendChild(option);
    		}
    	
    }
    
    //清除之前列表框里面的东西
    function clearList()
    {
    	var models = document.getElementById("models");
    	while(models.childNodes[0]!=null)
    		{
    			models.removeChild(models.childNodes[0]);
    		}
    }
    </script>
  </head>
  
  <body>
    <h1>Select Model Year and Make</h1>
    <br/>
    <form action="#">
     <span style = 'font-weight:bold;'>Model Year:</span>
    <select id='modelYear' οnchange="refreshModelList();">
    	<option selected='selected'>Select One</option>
    	<option value = '2006'>2006</option>
    	<option value = '1995'>1995</option>
    	<option value = '1985'>1985</option>
    	<option value = '1970'>1970</option>
    </select>
    <br/>
    <br/>
    <span style='font-weight:bold;'>Make:</span>
    <select id='make' οnchange="refreshModelList();">
    	<option selected='selected'>Select One</option>
    	<option value='Chevrolet'>Chevrolet</option>
    	<option value='Dodge'>Dodge</option>
    	<option value='Pontiac'>Pontiac</option>
    	 </select>
    <br/>
    <br/>
    <span style='font-weight:bold;'>Models:</span>
    <br/>
    <select id='models' size='6' style='width:300px;'>
    
    </select>
    </form>   
  </body>
</html>


DynamicServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;

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

public class DynamicListServlet extends HttpServlet {
	private ArrayList<Car> cars = new ArrayList<Car>();
	
	public DynamicListServlet()
	{
		initCars();
	}
	
	
	/**
	 * 初始化cars,简单模拟。
	 * */
	public void initCars()
	{
			cars.add(new Car(2006, "Dodge", "Charger"));
			cars.add(new Car(2006, "Dodge", "Magnum"));
	        cars.add(new Car(2006, "Dodge", "Ram"));
	        cars.add(new Car(2006, "Dodge", "Viper"));
	        cars.add(new Car(1995, "Dodge", "Avenger"));
	        cars.add(new Car(1995, "Dodge", "Intrepid"));
	        cars.add(new Car(1995, "Dodge", "Neon"));
	        cars.add(new Car(1995, "Dodge", "Spirit"));
	        cars.add(new Car(1985, "Dodge", "Aries"));
	        cars.add(new Car(1985, "Dodge", "Daytona"));
	        cars.add(new Car(1985, "Dodge", "Diplomat"));
	        cars.add(new Car(1985, "Dodge", "Omni"));
	        cars.add(new Car(1970, "Dodge", "Challenger"));
	        cars.add(new Car(1970, "Dodge", "Charger"));
	        cars.add(new Car(1970, "Dodge", "Coronet"));
	        cars.add(new Car(1970, "Dodge", "Dart"));

	        cars.add(new Car(2006, "Chevrolet", "Colorado"));
	        cars.add(new Car(2006, "Chevrolet", "Corvette"));
	        cars.add(new Car(2006, "Chevrolet", "Equinox"));
	        cars.add(new Car(2006, "Chevrolet", "Monte Carlo"));
	        cars.add(new Car(1995, "Chevrolet", "Beretta"));
	        cars.add(new Car(1995, "Chevrolet", "Camaro"));
	        cars.add(new Car(1995, "Chevrolet", "Cavalier"));
	        cars.add(new Car(1995, "Chevrolet", "Lumina"));
	        cars.add(new Car(1985, "Chevrolet", "Cavalier"));
	        cars.add(new Car(1985, "Chevrolet", "Chevette"));
	        cars.add(new Car(1985, "Chevrolet", "Celebrity"));
	        cars.add(new Car(1985, "Chevrolet", "Citation II"));
	        cars.add(new Car(1970, "Chevrolet", "Bel Air"));
	        cars.add(new Car(1970, "Chevrolet", "Caprice"));
	        cars.add(new Car(1970, "Chevrolet", "Chevelle"));
	        cars.add(new Car(1970, "Chevrolet", "Monte Carlo"));

	        cars.add(new Car(2006, "Pontiac", "G6"));
	        cars.add(new Car(2006, "Pontiac", "Grand Prix"));
	        cars.add(new Car(2006, "Pontiac", "Solstice"));
	        cars.add(new Car(2006, "Pontiac", "Vibe"));
	        cars.add(new Car(1995, "Pontiac", "Bonneville"));
	        cars.add(new Car(1995, "Pontiac", "Grand Am"));
	        cars.add(new Car(1995, "Pontiac", "Grand Prix"));
	        cars.add(new Car(1995, "Pontiac", "Firebird"));
	        cars.add(new Car(1985, "Pontiac", "6000"));
	        cars.add(new Car(1985, "Pontiac", "Fiero"));
	        cars.add(new Car(1985, "Pontiac", "Grand Prix"));
	        cars.add(new Car(1985, "Pontiac", "Parisienne"));
	        cars.add(new Car(1970, "Pontiac", "Catalina"));
	        cars.add(new Car(1970, "Pontiac", "GTO"));
	        cars.add(new Car(1970, "Pontiac", "LeMans"));
	        cars.add(new Car(1970, "Pontiac", "Tempest"));
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Car car ;
		//拿到request请求中的参数
		String yearString = request.getParameter("year");
		int year = Integer.parseInt(yearString);
		String make = request.getParameter("make");
		StringBuffer results = new StringBuffer();
		//以XML的格式传送过去
		results.append("<models>");
		//使用迭代器,来遍历cars中的所有值
		for(Iterator<Car> carIterator = cars.iterator();carIterator.hasNext();)
		{
			car = carIterator.next();
			if(car.getModelYear() == year){
				if(car.getMake().equals(make)) //用car.getMake() == make则无法进入
				{	
					results.append("<model>");
					String model = car.getModels();
					results.append(model);
					results.append("</model>");
				}
			}
		}
		results.append("</models>");
		response.setContentType("text/xml");
		response.getWriter().println(results);
	}

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

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值