可取消判断是否为2的,ajax也可以不用传2
来源:3-8 实现二级联动菜单-2
kevin唯心
2019-11-03 15:16:16
package com.imooc.ajax;
import java.io.IOException;
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 com.alibaba.fastjson.JSON;
/**
* Servlet implementation class ChannelServlet
*/
@WebServlet("/channel")
public class ChannelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ChannelServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String level=request.getParameter("level");
String parent =request.getParameter("parent");
System.out.println(level);
System.out.println(parent);
List chlist= new ArrayList();
if(level!=null&&level.equals("1")) {
chlist.add(new Channel("ai","前沿/区块链/人工智能"));
chlist.add(new Channel("web","前端/小程序/js"));
}/*else if(level.equals("2")) {*/
if(parent!=null&&parent.equals("ai")){
chlist.add(new Channel("micro","微服务"));
chlist.add(new Channel("blockchain","区块链"));
chlist.add(new Channel("other","。。。"));
}else if(parent!=null&&parent.equals("web")){
chlist.add(new Channel("html","HTML"));
chlist.add(new Channel("css","CSS"));
chlist.add(new Channel("other","。。。"));
}
/* } */
String json =JSON.toJSONString(chlist);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println(json);
}
}<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
"url":"/ajax/channel",
"data":{"level":"1"},
"type":"get",
"dataType":"json",
"success":function(data){
console.log(data);
for(i=0; i<data.length;i++){
var ch =data[i];
$("#lv1").append("<option id='option' value='"+ch.code+"'>"+ch.name+"</option>")
}
}
})
})
$(function(){
$("#lv1").on("change",function(){
var parent=$(this).val();
console.log(parent);
$.ajax({
"url":"/ajax/channel",
"data":{"parent":parent},
"type":"get",
"dataType":"json",
"success":function(data){
console.log(data);
//移除所有lv2下的option
$("#lv2>option").remove();
for(i=0; i<data.length;i++){
var ch =data[i];
$("#lv2").append("<option id='option' value='"+ch.code+"'>"+ch.name+"</option>")
}
}
})
})
})
</script>
</head>
<body>
<select id="lv1" style="width:200px;height:30px">
<option id="option" selected="selected">请选择</option>
</select>
<select id="lv2" style="width:200px;height:30px"></select>
</body>
</html>代码如上,和老师的略有不同,只是判断了一下是否为空就不会报空指针异常了。我还是比较能习惯这种思路,而且我第二个ajax 并没有再次传level,我感觉老师那种逻辑我转不过弯来。老师能否给点逻辑上的指点,本人初级开发逻辑上面有点死板,很苦恼
1回答
好帮手慕小班
2019-11-03
同学你好,1、如上代码,同学的写法也是可以的,同学是直接对level与parent进行了判断,直接对这两个参数进行判断,这样也是可以。
2、 1)、这里老师的意思是将level作为菜单级别的判断依据,这些请求都是发送到channel这个Servlet,那在这个Servlet中如何判断这些菜单的级别呐,就可以通过这些参数来判断了。
2)、这里只是一个二级菜单,如果这里是三级菜单或四级菜单呐,每一级别的菜单都有很多条数据呐,此时我们在Servlet就可以根据这个level、parent参数,来判断这是哪一级的菜单,能够更加快速的定位,这也是以后开发中常见的一种情况,例如;
if(1){
//一级菜单的内容
//大类别
}else if(2){
//二级菜单
//中级类别
}else if(3){
//三级菜单
//小类别
}else if(4){
//四级菜单
//详细信息
}这样就能简洁明了的的书写一个菜单的内容,并且层次分明。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题