什麼是jsonjavascript
概念:html
格式:java
鍵值對:ajax
對象:sql
數組:apache
json文本轉對象json
示例:數組
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript"> //操做json對象 function test1() { //定義一個json格式的字符串 var text = '{"firstName":"John", "lastName":"Doe"}'; //將json格式的字符串,轉換成javascript對象 var obj = JSON.parse(text); alert(obj.firstName); alert(obj.lastName); } //test1(); //操做json數組 function test2() { //定義一個json格式的字符串 var text = '{ "employees" : [' + '{ "firstName":"John" , "lastName":"Doe" },' + '{ "firstName":"Anna" , "lastName":"Smith" },' + '{ "firstName":"Peter" , "lastName":"Jones" } ]}'; //將json格式的字符串,轉換成javascript對象 var obj = JSON.parse(text); alert(obj.employees[0].firstName); alert(obj.employees[1].firstName); alert(obj.employees[2].firstName); } test2(); </script> </head> <body> </body> </html>
使用原始Ajax和json實現省市縣三級聯動服務器
需求:完成省市縣三級聯動app
注意點:省市縣關係關聯(上級行政區id爲下級行政區的parenetId)
點擊上級區域後利用ajax自動加載全部下級區域
資源:
思路:
代碼實現:
頁面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="root" value="${pageContext.request.contextPath }"/> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>省市頁面</title> <script type="text/javascript"> //獲取ajax核心對象 function getXHR(){ var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else{ // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; } //第一步:完成省一級地區數據的加載 window.onload = function(){ //發送ajax請求,給服務器 var xhr = getXHR(); xhr.open("get","${root}/getData?parentid=0",true); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var data = xhr.responseText; //將json格式字符串,轉換成js對象 var arr = JSON.parse(data); var _province = document.getElementById("province"); //遍歷循環數組,將數據添加到省一級地區的select標籤中去 for ( var i = 0; i < arr.length; i++) { //不斷的建立option標籤 var _option = document.createElement("option"); //設置當前地區的代號 _option.value = arr[i].codeid; _option.innerHTML = arr[i].cityName; _province.appendChild(_option); } } }; }; //第二步:選擇省的時候,出現對應的市 function _getCity(_this){ //獲取市的數據的時候,將原來的數據清空 var _city = document.getElementById("city"); _city.length = 1; var _area = document.getElementById("area"); _area.length = 1; var xhr = getXHR(); xhr.open("get","${root}/getData?parentid="+_this.value,true); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var data = xhr.responseText; //將json格式字符串,轉換成js對象 var arr = JSON.parse(data); //遍歷循環數組,將數據添加到省一級地區的select標籤中去 for ( var i = 0; i < arr.length; i++) { //不斷的建立option標籤 var _option = document.createElement("option"); //設置當前地區的代號 _option.value = arr[i].codeid; _option.innerHTML = arr[i].cityName; _city.appendChild(_option); } } }; } //第三步:選擇市的時候,出現對應的縣 function _getArea(_this){ //獲取縣的數據的時候,將原來的數據清空 var _area = document.getElementById("area"); _area.length = 1; var xhr = getXHR(); xhr.open("get","${root}/getData?parentid="+_this.value,true); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var data = xhr.responseText; //將json格式字符串,轉換成js對象 var arr = JSON.parse(data); //遍歷循環數組,將數據添加到省一級地區的select標籤中去 for ( var i = 0; i < arr.length; i++) { //不斷的建立option標籤 var _option = document.createElement("option"); //設置當前地區的代號 _option.value = arr[i].codeid; _option.innerHTML = arr[i].cityName; _area.appendChild(_option); } } }; } </script> </head> <body> <center> <select id="province" name="province" onchange="_getCity(this);"> <option value="none">--請選擇省--</option> </select> <select id="city" name="city" onchange="_getArea(this);"> <option value="none">--請選擇市--</option> </select> <select id="area" name="area" > <option value="none">--請選擇縣或區--</option> </select> </center> </body> </html>
後臺:
package com.learn.json; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; 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 org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import com.learn.entity.ProvinceEntity; import com.learn.util.JDBCUtils; import flexjson.JSONSerializer; public class Province extends HttpServlet { private static final long serialVersionUID = 1L; QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource()); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String parentId = request.getParameter("parentId"); System.out.println("parentId : "+parentId); List<ProvinceEntity> dataList=getData(parentId); JSONSerializer serializer = new JSONSerializer(); String serialize = serializer.serialize(dataList); System.out.println(serialize); response.setContentType("text/html; charset=utf-8"); response.getWriter().write(serialize); } private List<ProvinceEntity> getData(String id) { String sql4 ="select * from province where parentid=?"; List<ProvinceEntity> list=null; try { list = runner.query(sql4, new BeanListHandler<ProvinceEntity>(ProvinceEntity.class),id); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public static void main(String[] args) { QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource()); String sql4 ="select * from province where parentid=?"; List<ProvinceEntity> list=null; try { list = runner.query(sql4, new BeanListHandler<ProvinceEntity>(ProvinceEntity.class),0); for (ProvinceEntity province : list) { System.out.println(province.getCityName()); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
效果: