AJAX实现两个下拉框之间内容的联动

1.效果

第一个下拉框选择蔬菜时,第二个联动显示黄瓜,番茄
第一个下拉框选择水果时,第二个联动显示苹果,菠萝

2.实现

JSP页面,connect.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'connect.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">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 
 <script type="text/javascript">
  function change(){
   var sortName = document.getElementById("sort").value;
   
   //1.获得ajax对象
   var xhr = new XMLHttpRequest();
   //2.新建请求
   xhr.open("post","ConnectServlet.do",true);
   //3.请求头
   xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
   //4.请求体
   xhr.send("method=connect&sortName="+sortName);
   
   //5.前后台交互
   xhr.onreadystatechange = function(){
    //正常交互
    if(xhr.status==200 && xhr.readyState==4){
     //6.得到返回结果
     var result = xhr.responseText;
     //拆分json里的所有数据为单个数据
     var obj = eval("("+result+")");
     var arr = obj.list;
     //7.根据结果处理同步,种类下拉框联动内容下拉框
     //先清空内容下拉框
     document.getElementById("content").options.length=0;
     //将要显示的内容展现
     for(var i = 0;i<arr.length;i++){
      var option = new Option(arr[i],arr[i]);
      document.getElementById("content").options.add(option);
     }
    }
   };
  }
 </script>
  </head>
 
  <body>
  <select id="sort" οnchange="change()">
     <option vlaue="firut">水果</option>
     <option value="vagetable">蔬菜</option>
    </select><br>
    <br>
    <select id="content">
     <option></option>
    </select>

</body>
</html>

Servlet,ConnectServlet

public class ConnectServlet extends HttpServlet {
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request,response);
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   //要调用的方法
  String method = request.getParameter("method");
  
  if("connect".equals(method))
   connect(request,response);

 }
 //联动方法
 private void connect(HttpServletRequest request,
   HttpServletResponse response) {
  //解决乱码
  response.setCharacterEncoding("utf-8");
  //看是蔬菜还是水果
  String sortName = request.getParameter("sortName");
  //根据sortName对数据库进行查询,返回不同数据,这里就不操作数据库了
  List list = new ArrayList();
  if("vagetable".equals(sortName)){
   list.add("黄瓜");
   list.add("番茄");
  }else{
   list.add("苹果");
   list.add("菠萝");
  }
  
  try {
   //向后台传数据的对象
   PrintWriter out = response.getWriter();
   //用json来存集合,需要导相关的jar包
   JSONObject json = new JSONObject();
   json.put("list", JSONArray.fromObject(list));
   System.out.println(json.toString());
   out.print(json.toString());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下拉框二级联动数据库的实现需要前端和后端的配合,前端需要通过JavaScript监听第一个下拉框的变化事件,然后向后端发送Ajax请求获取第二个下拉框的数据。后端需要提供两个接口,一个用于获取第一个下拉框的数据,另一个用于根据第一个下拉框的选择值获取第二个下拉框的数据。 以下是一个简单的实现思路: 1.前端代码: ```html <!-- 第一个下拉框 --> <select id="building"> <option value="">请选择公寓</option> <!-- 动态添加选项 --> </select> <!-- 第二个下拉框 --> <select id="dormitory"> <option value="">请选择宿舍</option> <!-- 动态添加选项 --> </select> <script> // 监听第一个下拉框的变化事件 document.getElementById('building').addEventListener('change', function() { // 获取选择的值 var buildingId = this.value; // 发送Ajax请求获取第二个下拉框的数据 var xhr = new XMLHttpRequest(); xhr.open('GET', '/findAllDormitory?buildingId=' + buildingId); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 解析返回的数据 var dormitories = JSON.parse(xhr.responseText); // 清空第二个下拉框的选项 var dormitorySelect = document.getElementById('dormitory'); dormitorySelect.innerHTML = '<option value="">请选择宿舍</option>'; // 动态添加选项 dormitories.forEach(function(dormitory) { var option = document.createElement('option'); option.value = dormitory.dormitoryId; option.textContent = dormitory.dormitoryName; dormitorySelect.appendChild(option); }); } }; xhr.send(); }); </script> ``` 2.后端代码: ```python # 定义两个接口 @app.route('/findAllBuilding') def find_all_building(): # 查询公寓表获取数据 buildings = Building.query.all() # 将数据转换为字典列表 building_list = [{'buildingId': building.buildingId, 'buildingName': building.buildingName} for building in buildings] # 返回数据 return jsonify(building_list) @app.route('/findAllDormitory') def find_all_dormitory(): # 获取一级下拉框的选择值 building_id = request.args.get('buildingId') # 根据选择值查询宿舍表获取数据 dormitories = Dormitory.query.filter_by(buildingId=building_id).all() # 将数据转换为字典列表 dormitory_list = [{'dormitoryId': dormitory.dormitoryId, 'dormitoryName': dormitory.dormitoryName} for dormitory in dormitories] # 返回数据 return jsonify(dormitory_list) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值