省份-市級-區級 級聯 Ajax JSON

省份-市級-區級 級聯  Ajax JSON

技術爲JQuery+Ajax+JSON, 當用戶選定省份後,級聯出市,選出市後,級聯出區。原理爲:JQuery檢測出下拉列表變化時,通過Ajax調用後臺數據庫,後臺傳回JSON,動態添加<option></option>並且賦值到下一級中。注意編碼問題爲了方便統一UTF-8。

js關鍵代碼:

function convertURL(url) { //時間戳
	var timstamp = (new Date()).valueOf();
	if (url.indexOf("?") >= 0) {
		url = url + "&t=" + timstamp;
	} else {
		url = url + "?t=" + timstamp;
	}
	return url;
}

$().ready(function() {// JQUERY市級聯
			$("#Province").change(
					function() {
						$("#City").html(
								'<option selected="selected">--全部--</option>');
						var id = document.getElementById("Province").value;

						$.getJSON(
								convertURL("addprochange.action?proid=" + id),
								function(data) {
									$.each(data.city, function(id, name) {
										$("#City").append(
												'<option value='
														+ data.city[id].id
														+ '>'
														+ data.city[id].name
														+ '</option>');
									});

								});
					});

		});

$().ready(function() {// JQUERY區級聯
		$("#City").change(function() {$("#Direct").html('<option selected="selected">--全部--</option>');
		var id = document.getElementById("City").value;
		$("#Show tr:gt(2)").empty();
		$.getJSON(convertURL("addcitchange.action?proid="+ id),
		function(data) {$.each(
						data.direct,
						function(id,name) {
							$("#Show").append('<tr><td><input id=old name=old type=checkbox value='
									+ data.direct[id].id+ '></td>'+ '<td>'
									+ $("#Province").find("option:selected").text()
									+ '</td>'+ '<td>'
									+ $("#City").find("option:selected").text()
									+ '</td>'+ '<td>'+ data.direct[id].name
									+ '</td></tr>');
							});
					});
			});
});

Java核心代碼,這裏採用了JSONjar包,自動封裝成JSON數據

	public void adpchange() throws MyException {// 省份改變,返回List<City>
		try {
			if (proid != null)
				listcity = actrl.findCity(Integer.parseInt(proid));
			else
				listcity = actrl.findAllCity();
			ActionContext con = ActionContext.getContext();
			HttpServletResponse resp = (HttpServletResponse) con
					.get(ServletActionContext.HTTP_RESPONSE);
			resp.setCharacterEncoding("UTF-8");//注意編碼
			JSONObject jsonObject = new JSONObject();//JSON封裝
			jsonObject.put("city", listcity);
			resp.getWriter().write(jsonObject.toString());
			jsonObject.clear();
		} catch (Exception e) {
			log.error("地址返回錯誤");
			throw new MyException("地址返回錯誤");
		}
	}
返回List<Direct> 類似

	public void adcchange() throws MyException {// 城市改變,返回List<Direct>
		try {
			if (proid != null)
				listdirect = actrl.findDirect(Integer.parseInt(proid));
			else
				listdirect = actrl.findAllDirect();
			ActionContext con = ActionContext.getContext();
			HttpServletResponse resp = (HttpServletResponse) con
					.get(ServletActionContext.HTTP_RESPONSE);
			resp.setCharacterEncoding("UTF-8");
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("direct", listdirect);
			resp.getWriter().write(jsonObject.toString());
			jsonObject.clear();
		} catch (Exception e) {
			log.error("地址返回錯誤");
			throw new MyException("地址返回錯誤");
		}
	}

度娘上基本都是講地址寫死到JS中,個人感覺這樣維護起來比較麻煩。而且有些冷門地址幾乎不需要,不如寫到數據庫中靈活一些。


大工搞成,show一下:

1.


2.


3.


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