Ajax和JSON完成二级菜单联动的功能

首先需要找好JSON的包哦:

  链接:http://pan.baidu.com/s/1jH6gN46 密码:lbh1

1:首先创建一个前台页面,比如secondMenu.jsp,源码如下所示:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>二级菜单联动</title>
 8 <script type="text/javascript" src="js/jquery.min.js"></script>
 9 <script type="text/javascript">
10     $(function(){
11         //给下拉列表添加事件
12         $("#city1").change(function(){
13             //测试可以拿到值,也用于测试是否正确引入js
14             //alert($(this).val()+" "+$("#city1 option:selected").text());
15             //post传输,固定四个参数;
16             //第一个参数是url:发送请求地址
17             //第二个参数data:待发送的值key/value
18             //第三个参数callback:发送返回时回调函数
19             //第四个参数type:返回内容格式,常用text,json,
20             $.post("city",{city1:$(this).val()},
21                 function(result){
22                 
23                 //获取第二级城市的id
24                 var city2=$("#city2");
25                 //清空第二级里面的城市
26                 city2.empty();
27                 for(var i=0;i<result.length;i++){
28                     city2.append("<option value="+result[i].id+">"+result[i].name+"</option>");
29                 }
30                 
31             },"json");
32         });
33     });
34 </script>
35 
36 </head>
37 <body>
38 
39 <h2>城市</h2>
40 <select id="city1" onchange="">
41     <option value="1">河南</option>
42     <option value="2">北京</option>
43 </select>
44 
45 <select id="city2">
46     <option value="1001"></option>
47     <option value="1002"></option>
48     <option value="1003"></option>
49     <option value="1004"></option>
50 </select>
51 
52 </body>
53 </html>

2:然后创建一个实体类,比如CityInfo.java,源码如下所示:

 1 package com.bie.po;
 2 /** 
 3 * @author BieHongLi 
 4 * @version 创建时间:2017年3月4日 下午3:48:48 
 5 * 城市的实体类
 6 */
 7 public class CityInfo {
 8 
 9     private Integer id;
10     private String name;
11     public Integer getId() {
12         return id;
13     }
14     public void setId(Integer id) {
15         this.id = id;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     //重写构造方法
24     public CityInfo(Integer id, String name) {
25         super();
26         this.id = id;
27         this.name = name;
28     }
29     
30     
31 }

3:模拟数据库进行后台处理,在servlet页面进行处理,源码如下所示:

 1 package com.bie.servlet;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.annotation.WebServlet;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 
14 import com.bie.po.CityInfo;
15 
16 import net.sf.json.JSONArray;
17 
18 /** 
19 * @author BieHongLi 
20 * @version 创建时间:2017年3月4日 下午3:36:32 
21 * 
22 */
23 @WebServlet("/city")
24 public class SecondMenuServlet extends HttpServlet{
25 
26     private static final long serialVersionUID = 1L;
27 
28     @Override
29     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
30             throws ServletException, IOException {
31         this.doPost(request, response);
32     }
33 
34     @Override
35     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
36             throws ServletException, IOException {
37         //获取前台页面传输的数据
38         String city1=request.getParameter("city1");
39         System.out.println("测试数据:"+city1);
40         
41         //存放城市的实体类
42         List<CityInfo> list=new ArrayList<>();
43         //模拟数据库,将前台的数据进行匹配,如果匹配显示下面创建的城市
44         if("1".equals(city1)){
45             for(int i=0;i<10;i++){
46                 CityInfo ci=new CityInfo(i, "新乡"+i);
47                 list.add(ci);
48             }
49         }
50         if("2".equals(city1)){
51             for(int i=0;i<10;i++){
52                 CityInfo ci=new CityInfo(i, "北京"+i);
53                 list.add(ci);
54             }
55         }
56         
57         //将json所需的包放到lib里面,将list转换为json
58         JSONArray json=JSONArray.fromObject(list);
59         
60         //响应前台页面
61         response.setCharacterEncoding("utf-8");
62         response.setContentType("text/json");
63         PrintWriter out=response.getWriter();
64         out.println(json);//打印json,为了前台页面获取
65         out.flush();//刷新流
66         out.close();//关闭流
67     }
68     
69 }

效果如下所示:

革命尚未成功,别先生仍需努力啊!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

Strtus2框架笔记

Struts2以WebWork优秀的设计思想为核心,吸收了 Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web 应用程序框架。 S...

2615
来自专栏Android干货园

Base封装(一)--我的最简MVP架构

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/73...

801
来自专栏Java3y

监听器第一篇【基本概念、Servlet各个监听器】

什么是监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方...

3416
来自专栏为数不多的Android技巧

你真的了解AsyncTask?

虽说现在做网络请求有了Volley全家桶和OkHttp这样好用的库,但是在处理其他后台任务以及与UI交互上,还是需要用到AsyncTask。但是你真的了解Asy...

752
来自专栏Java技术分享

Servlet是如何实现MVC的?

Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分,Servlet技术的推出,扩展了Java语言在服务器端开发的功能,巩固了Java语言在服...

1978
来自专栏非著名程序员

Base封装之我的最简MVP架构

绪论 最近懒癌症犯了,好久都没写博客了,当然也在做一些东西,也在整理自己一直以来使用的一些技术点,从Retrofit到OkGO,从ListView到Recycl...

2259
来自专栏刘望舒

AsyncTask源码分析(Android7.0)

前言 此前写过一篇AsyncTask源码分析的文章,但写的不是很好,最近看过了android7.0的AsyncTask源码,所以准备再写一篇。 1.Androi...

21310
来自专栏xingoo, 一个梦想做发明家的程序员

Web监听器导图详解

  监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: ? Web监听器   1 什么是web监听器?   web监听器是一种Se...

1709
来自专栏积累沉淀

Listener监听器

在Servlet技术中已经定义了一些事件,并且我们可以针对这些事件来编写相关的事件监听器,从而对事件作出相应处理。Servlet事件主要有3类:Servlet上...

18110
来自专栏一个会写诗的程序员的博客

Frida JAVA API 文档JavaWeakRef

a boolean specifying whether the current process has the a Java VM loaded, i.e. ...

843

扫码关注云+社区