AJAX的核心對象以及在級聯中的簡單應用實例

本篇文章主要是對學的AJAX做一個簡單的總結和應用,實現一個城市選擇的級聯操作。

1,前臺form表單實現城市的級聯

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>級聯下拉案例</title>
<script type="text/javascript" src="/selectHTML.js"></script>
</head>
<body>
	省份:
	<select name="province" id="province" οnchange="loadCitys(this);">
	</select> &emsp; 
	城市:
	<select name="city" id="city">
		<option value='-1'>---請選擇---</option>
	</select>
</body>
</html>

 

 

2,實現級聯的js代碼(主要是通過AJAX技術實現前後臺數據交互)

 

function createAjax(){
	// 解決瀏覽器兼容性問題
        var ajax;
	try {
		ajax = new XMLHttpRequest();
	} catch (e) {
		ajax = new ActiveXObject("Mircosoft.XMLHTTP");
	}
	return ajax;
}

// 1.在頁面加載完畢後,通過AJAX方式,動態加載省份信息
window.οnlοad=function(){
	
	var provinceSel = document.getElementById("province");
	provinceSel.innerHTML="<option value='-1'>---請選擇---</option>";
	
	// 創建核心對象
	var ajax = createAjax();
	// 添加狀態監聽
	ajax.onreadystatechange=function(){
		if(ajax.readyState==4 && ajax.status==200){
			var resp = ajax.responseText;
			//console.debug(resp);
			provinceSel.innerHTML+=resp;
		}
	};
	// 創建http請求
	ajax.open("get","/province");
	// 發送請求
	ajax.send();
};

function onchange(){
	// this >> provinceSel
	//[window.]loadCitys(this);
}

// 2.在選擇某個省份後,及時加載這個省份對應的城市信息
function loadCitys(privinceSel){
	// 獲取選中的省份ID
	var pid = privinceSel.value;
	
	// 獲取城市select
	var citySel = document.getElementById("city");
	citySel.innerHTML="<option value='-1'>---請選擇---</option>";
	
	// 創建核心對象
	var ajax = createAjax();
	// 添加狀態監聽
	ajax.onreadystatechange=function(){
		if(ajax.readyState==4 && ajax.status==200){
			var resp = ajax.responseText;
			//console.debug(resp);
			citySel.innerHTML += resp;
		}
	};
	// 創建http請求
	ajax.open("get","/loadCityByProvince?provinceId="+pid);
	// 發送請求
	ajax.send();
	
}

   

 

3,Servlet後臺獲取省級信息代碼

 

package ajax.web;

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

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

import ajax.domain.Province;

@WebServlet("/province")
public class ProvinceServlet extends HttpServlet {

	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		// 設置編碼
		req.setCharacterEncoding("UTF-8");
		
		// 加載後臺省份信息
		List<Province> provinceList = Province.getAllProvince();
		
		// 準備響應配置
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter writer = resp.getWriter();
		
		// 遍歷每一個省份信息.返回<option value="1">四川</option>結構
		for (Province province : provinceList) {
			writer.write("<option value='"+province.getId()+"'>"+province.getName()+"</option>");
		}
		
	}
	
}

 使用json時要依賴的jar文件,在使用jquery的json時,沒有引用該文件的時候容易報錯。

 

4,Servlet獲取市級城市信息

 

package ajax.web;

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

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

import ajax.domain.City;
import ajax.domain.Province;

@WebServlet("/loadCityByProvince")
public class CityServlet extends HttpServlet {

	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		// 設置編碼
		req.setCharacterEncoding("UTF-8");
		
		// 獲取請求省份信息
		String provinceId  = req.getParameter("provinceId");
		
		// 根據省份信息,加載對應的城市信息
		List<City> citys = City.getCityByProvinceId(Long.parseLong(provinceId));
		
		// 準備響應配置
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter writer = resp.getWriter();
		
		// 遍歷每一個省份信息.返回<option value="1">成都</option>結構
		for (City city : citys) {
			writer.write("<option value='"+city.getId()+"'>"+city.getName()+"</option>");
		}
		
	}
	
}

 

 

 

 

5,Servlet獲取市級城市信息(這兒返回的數據爲JSON格式)

 

package ajax.web;

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

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

import net.sf.json.JSONSerializer;

import ajax.domain.City;
import ajax.domain.Province;

@WebServlet("/loadCityByProvinceJSON")
public class CityJSONServlet extends HttpServlet {

	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		// 設置編碼
		req.setCharacterEncoding("UTF-8");
		
		// 獲取請求省份信息
		String provinceId  = req.getParameter("provinceId");
		
		// 根據省份信息,加載對應的城市信息
		List<City> citys = City.getCityByProvinceId(Long.parseLong(provinceId));
		
		// 準備響應配置
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter writer = resp.getWriter();
		
		// 遍歷每一個省份信息.返回<option value="1">成都</option>結構
		writer.write(JSONSerializer.toJSON(citys).toString());
	}
	
}

 

 

web.xml配置文件

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

 

 

如果上述Servlet返回JSON數據,會依賴JSON相關jar包

ezmorph-1.0.6:使用json時要依賴的jar文件,在使用jquery的json時,沒有引用該文件的時候容易報錯。

json-lib-2.3-jdk15:JSON核心包

使用json-lib-2.2.3-jdk15.jar必要也要導入它的依賴包:

ezmorph-1.0.6.jar 
commons-lang 2.4 
commons-beanutils 1.7.0 
commons-collections 3.2 
commons-logging 1.1.1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章