利用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格式的数据,对数据进行操作,往页面上添加内容 //页面初始化加载菜 ...
随机推荐
- Visual Studio 2017 IDE之xml过大报错
XML处理时遇到这个错误 在powershell中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual ...
- Unable to locate package python-pip
原文:https://blog.csdn.net/yyinhai/article/details/53056973 Ubuntu下执行apt install python-pip得到如下错误提示: R ...
- webpack学习笔记--区分环境
为什么需要区分环境 在开发网页的时候,一般都会有多套运行环境,例如: 在开发过程中方便开发调试的环境. 发布到线上给用户使用的运行环境. 这两套不同的环境虽然都是由同一套源代码编译而来,但是代码内容却 ...
- OSGi HelloWorld
1.创建项目 2.Debug Configurations,配好之后,可以点一下右下角的Validate Bundles验证一下是否有问题 3.Debug
- 一起学Hadoop——使用自定义Partition实现hadoop部分排序
排序在很多业务场景都要用到,今天本文介绍如何借助于自定义Partition类实现hadoop部分排序.本文还是使用java和python实现排序代码. 1.部分排序. 部分排序就是在每个文件中都是有序 ...
- Windows 系统判断MD5 值的办法
Linux 系统的文件要传到Windows系统里面,传输过程中网络不稳定,为了判断文件是否完整传输,所以就用md5的方式判断是否同一个文件 Linux系统 [root@augusite ~]# md5 ...
- day8.登陆注册简单实现
username = input('请输入注册的用户名:') password = input('请输入注册名的密码:') with open('list_of_info',mode='w',enco ...
- Java中字符串比较的问题
package com.hxl; import java.util.Scanner; public class Test { public static void main(String[] args ...
- F(x) 数位dp
Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight ...
- Hexo博客yilia主题添加Gitment评论系统
一开始搭建hexo+yilia博客使用的评论功能是通过来必力实现的.来必力免费,功能多,一开始的体验效果很好,但是后来打开网站发现来必力加载的越来越慢(来必力是韩国的公司,可能是国内限制),遂打算换一 ...