利用Ajax和JSON实现关于查找省市名称的二级联动功能
功能实现的思路:我们经常碰见网上购物时候填写收件地址会用到这个查找省市县的三级联动查找功能,我们可以利用Ajax和JSON技术模拟这个功能,说白了同样是使用Ajax的局部数据更新功能这个特性。因为省市都会有很多个,所以还需要使用JSONArray对象。当我们选择某一个省的时候,会自动触发一个局部更新功能,这个功能的作用就是把我们选择的关于这个省的所有市名全部在指定的位置显示出来,当换成另外一个省的时候,还能自动把前边的选择的别的省所包含的市名全部删除换成当前选择省包含的市名。
实现步骤:
1、设计前端界面(毫无艺术感的前端界面):
<body>
省:
<select id="sheng" onchange="loadInfo()">
<option value="1">河南省</option>
<option value="2">四川省</option>
<option value="3">浙江省</option>
<option value="4">山东省</option>
</select>
市:
<select id="shi">
</select>
</body>
2、利用XMLHttpRequset对象放松请求并且接收从服务器端传来的处理结果:
(这里需要注意的是添加重置操作是必要的,因为添加进JSONArray数组的数据如果不清除的话,下一次输出结果的时候还会输出出来,这样会相当于把不属于这个省的市名也给输出出来了,这显然不符合设计要求)
<script type="text/javascript">
function loadInfo(){
var shengID = document.getElementById("sheng").value;
//这里要添加一个重置操作,确保每一次查询之前JsonArray数组是空的。
document.getElementById("shi").options.length=0;
//获取XMLHttpRequest对象(有些浏览器没有XMLHttpRequest这个对象,所以获取之前需要先判断一下)
var xmlHttp;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
//alert(xmlHttp.responseText);
var dataObj = eval("(" + xmlHttp.responseText + ")");
for(var i=0;i<dataObj.rows.length;i++){
var o=dataObj.rows[i];
//利用Selectobject对象的options方法动态的添加option选项
document.getElementById("shi").options.add(new Option(o.text,o.id));
} }
}
xmlHttp.open("get", "getAjaxName2?shengID="+shengID, true);
xmlHttp.send();
}
</script>
3、编写处理该请求的后台servlet代码:(这里依然没有使用数据库查询功能,而是手动添加了每个 省份包含的市名作为例子使用。)
package com.java1234.web; 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; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class GetAjaxNameServlet2 extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//取出从前端页面传入的待查询省份的shengID
String shengID = request.getParameter("shengID");
JSONObject resultJson = new JSONObject();
/**
* JSONArray对象的作用:每个省份都会有好多个市,当确认是那个省之后,
* 就会把每个省的所有市 的名称包含ID全部添加进JSONArray对象中,最后再把这个包含
* 待查询市的JSONArray对象当成一个对象添加进名为resultJson的JSONObject对象中。
*/
JSONArray jsonArray = new JSONArray();
JSONObject temp = null;
//这里只是模拟一下数据库查询操作
switch (Integer.parseInt(shengID)) {
case 1: {
temp = new JSONObject();temp.put("id", 1);temp.put("text", "郑州市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 2);temp.put("text", "南阳市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 3);temp.put("text", "周口市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 4);temp.put("text", "商丘市");
jsonArray.add(temp);
break;
}
case 2: {
temp = new JSONObject();temp.put("id", 5);temp.put("text", "成都市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 6);temp.put("text", "绵阳市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 7);temp.put("text", "乐山市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 8);temp.put("text", "达州市");
jsonArray.add(temp);
break;
}
case 3: {
temp = new JSONObject();temp.put("id", 9);temp.put("text", "杭州市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 10); temp.put("text", "温州市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 11);temp.put("text", "南通市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 12); temp.put("text", "宁波市");
jsonArray.add(temp);
break;
}
case 4: {
temp = new JSONObject();temp.put("id", 13);temp.put("text", "济南市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 14); temp.put("text", "青岛市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 15);temp.put("text", "泰安市");
jsonArray.add(temp);
temp = new JSONObject();temp.put("id", 16); temp.put("text", "聊城市");
jsonArray.add(temp);
break;
}
}
resultJson.put("rows", jsonArray);
out.println(resultJson);
out.flush();
out.close();
} }
4、配置web.xml文件然后运行就能实现这个功能。(运行结果是一个截图不再贴出来了,结果不重要,过程实现好了结果自然而然的不会差!)
总结:这是一个省市查询问题的二级联动,相对三级联动还算简单一点,但这简单的例子也是能帮助自己理解这一类问题的。这里我按自己的理解说明一下三级联动的实现思路:就是当我们选择到某一个市的时候,还要再触发一个 事件,这个事件就是要动态查找数据库然后把关于这个市所包含的所有县级城市名称全部输出到指定的位置,当然了,这个触发事件的实现函数还是要像查找市级城市名称方法一样获取选择的市级城市然后作为参数传入后台进行查询并把结果全部封装到一个JSONObject对象中,然后在前端进行数据处理并进行展示。
利用Ajax和JSON实现关于查找省市名称的二级联动功能的更多相关文章
- SSM框架,在Html界面利用ajax,json,jQuery实现省市区下拉框联动
1.先生成省市区表格 2.建立实体类 3.在html画出下拉框 <select id="province"> <option value="" ...
- Struts2.5 利用Ajax将json数据传值到JSP
AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...
- 使用Ajax和JSON实现注册时候验证用户名是否存在的功能
功能实现的思路:当通常一个网站需要注册用户信息的时候,往往会让用户起一个名字,但一般要求这个用户名称是不能重复的,为了判断新注册的用户填写的用户名是否已经存在,需要对填写的用户名称进行判断,实际项目开 ...
- 利用ajax的方式来提交数据到后台数据库及交互功能
怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置: $(function(){ var ...
- PHP AJAX 返回JSON 数据
例子:利用AJAX返回JSON数据,间接访问数据库,查出Nation 表,并用下拉列表显示 造一个外部下拉列表框 </select> JQurey代码 $(document).ready( ...
- 利用Ajax把前端的数据封装成JSON格式发送到服务器端并写成XML格式在服务器的硬盘上
1.首先要在前端把要发送的东西(这里是一个实例化的car对象)都准备好,利用Ajax发送到服务器端,代码如下: <html xmlns="http://www.w3.org/1999/ ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- javaScript(拼写树形)+ajax请求,去后台查找数据
第一步:页面加载完成时,利用jquery中的一函数,调用js方法,js方法,发送ajax请求,去后台查找父类权限集合,响应回来json格式的数据,对数据进行操作,往页面上添加内容 //页面初始化加载菜 ...
随机推荐
- js模板引擎art-Template(以前的artTemplate)
使用js.jquery动态生成html会非常麻烦.现在的模板引擎可以很简单的解决这个问题.比如腾讯出的art-Template 官网:http://aui.github.io/art-template ...
- html5和html的区别
最近看群里聊天聊得最火热的莫过于手机网站和html5这两个词.可能有人会问,这两者有什么关系呢?随着这移动互联网快速发展的时代,尤其是4G时代已经来临的时刻,加上微软对“XP系统”不提供更新补丁.维护 ...
- ASP.NET Core Http请求的处理流程
- [转] Mongoose 参考手册
Mongoose 参考手册 标签(空格分隔): MongoDB Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据 ...
- [转] 谈谈JS中的函数节流
函数节流的目的 从字面上就可以理解,函数节流就是用来节流函数从而一定程度上优化性能的.例如,DOM 操作比起非DOM 交互需要更多的内存和CPU 时间.连续尝试进行过多的DOM 相关操作可能会导致浏览 ...
- 经典平衡二叉树(AVL树)
二叉查找树(BSTree)中进行查找.插入和删除操作的时间复杂度都是O(h),其中h为树的高度.BST的高度直接影响到操作实现的性能,最坏情况下,二叉查找树会退化成一个单链表,比如插入的节点序列本身就 ...
- skyline添加wfs服务时,弹出错误“no layers were found”!
1.问题描述: 使用TerraExplorer Pro添加ArcGIS Server 10.2发布的WFS服务图层时,弹出如下错误: 2.错误原因: 发布wfs服务前,图层数据源的空间参考未设置,不能 ...
- Oozie
Oozie的功能模块 workflow 由多个工作单元组成 工作单元之间有依赖关系 MR1->MR2->MR3->result hadoop jar:提交1个MR oozie:监控当 ...
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- Centos7使用yum命令安装Mysql5.6.X
首先:具体的安装步骤在mysql官方文档上都有详细的描述. 文档虽然是英文,不过很容易理解,我就不一一翻译了. 官方文档地址:https://dev.mysql.com/doc/refman/5.6/ ...