• Javaweb05-Ajax


    1、基于jQuery的Ajax

    1.1 基本Ajax

    参数 说明
    url 请求地址
    type 请求类型
    data 请求参数
    dataType 返回参数
    success 成功处理函数
    error 错误处理函数
    
    <script type="text/javascript">
    	$(function(){
            //强调:基于javascript实现的ajax用法,比较繁琐,不需要掌握
            //需要掌握的是基于jQuery方式使用的Ajax
            //当用户登录,输入用户名后,失去焦点,校验登录用户名再系统中是否被使用
            $("#uname").blur(function(){
                //alert($(this).val());
                //获取输入的用户名,并实现非空校验
                var userName = $(this).val();
                if(userName == null || userName == ""){
                    alert("用户名不能为空");
                    return;
                }
    
                //基于jAuery的Ajax用法-基本用法
                $.ajax({
                    "url" : "<%=request.getContextPath()%>/checkUserName",
                    "type" : "post",
                    "data" : {"userName" : userName},
                    "dataType" : "text",
                    "success" : function(data){
                        //alert(JSON.parse(data));
                        if(JSON.parse(data)){
                            $("#showMsg").html("用户名存在").css({"color":"red"});
                        }else{
                            $("#showMsg").html("用户名可用").css({"color":"#2ceb0a"});
                        }
                    },
                    "error" : function(){
                        $("#showMsg").html("未知错误");
                    }
                }); 
    script>
    

    1.2 get提交Ajax

    语法:$.get(url,params,success);

    //基于JQuery的Ajax用法-扩展用法1,简写Get方,Ajax请求
    //语法:$.get(url,params,success)
    $.get("<%=request.getContextPath()%>/checkUserName",{"userName":serName},function(data){
        if(JSON.parse(data)){
            $("#showMsg").html("用户名存在get").css({"color":"red"});
        }else{
            $("#showMsg").html("用户名可用get").css({"color":"#2ceb0a"});
        }
    }); 
    

    1.3 post提交Ajax

    语法:$.post(url,params,success);

    //基于JQuery的Ajax用法-扩展用法1,简写Get方,Ajax请求
    //语法:$.post(url,params,success)
    $.post("<%=request.getContextPath()%>/checkUserName",{"userName" : userName},function(data){
        if(JSON.parse(data)){
            $("#showMsg").html("用户名存在post").css({"color":"red"});
        }else{
            $("#showMsg").html("用户名可用post").css({"color":"#2ceb0a"});
        }
    });
    

    1.4 请求处理

    checkUserName 对应的处理代码;通过Response返回结果,前端接收到结果并进行处理;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //后台接收用户名,校验是否重复
        //获取用户参数
        String userName = req.getParameter("userName");
        System.out.println("AjaxServlet userName=>>"+userName);
    
        //定义返回的结果
        boolean result= false;
    
        //模拟调用业务,查询当前用户名再数据中是否有记录
        List userNames = Arrays.asList("kh96","kgc","Ajax");
        if(userNames.contains(userName)) {
            result = true;
        }
    
        //异步请求响应结果,注意println不可以用,返回的结果会带\n
        System.out.println("AjaxServlet result==>"+result);
        resp.getWriter().println(result);
    }
    

    2、登录请求处理,并展示数据

    2.1 登录页面

    loginAnime.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    
    "UTF-8">
    登录页面
    
    
    
    	
    "<%=request.getContextPath()%>/loginAnime" method="get"> "1px" align="center" width="40%" cellspacing="0"> "hight:60px; font-size:16px;background-color:#B9DEE0">
    "2"> 欢迎登录课工场KH96动漫管理系统
    用户名: "text" name="uname" id="uname" placeholder="请输入"用户名> <span id = "showMsg" style="text-align:center;">
    用户密码: "password" name="upwd" id="upwd" placeholder="请输入用户密码">
    "2" align="center"> "submit" value="立即登录" /> "reset" value="重新填写" />

    注意:再使用Ajaz提交表单时,一定要返回false,要不然表单会再提交一次;

    2.2 存放数据

    2.2.1 通过request域转递数据

    AnimeServlet

    public class AnimeServlet extends HttpServlet {
    
    	private static final long serialVersionUID = -4726403189879316484L;
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doPost(req, resp);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		
    		// 模拟从数据库获取动漫列表
    		List animes = new ArrayList<>();
    		animes.add(new Animes(961, "玄幻", "斗破苍穹", "土豆", "萧炎", "玄机科技", "2019-08-04"));
    		animes.add(new Animes(962, "玄幻", "完美世界", "辰东", "石昊", "福煦影视", "2020-08-05"));
    		animes.add(new Animes(963, "言情", "狐妖小红娘", "小新", "白月初", "腾讯动漫", "2021-08-06"));
    		animes.add(new Animes(964, "言情", "秦时明月", "温世仁", "天明", "玄机科技", "2022-08-04"));
    		animes.add(new Animes(965, "热血", "镇魂街", "许辰", "曹焱兵", "卢李工作室", "2018-08-04"));
    		animes.add(new Animes(966, "热血", "雾山五行", "林魂", "闻人翊悬", "六道无鱼", "2018-08-04"));
    
    				
    		//将动漫集合放入request作用域
    		req.setAttribute("animes", animes);
    		
    		//转发到动漫列表页面
    		req.getRequestDispatcher("web5AjaxAndJquery/animeList.jsp").forward(req, resp);
    		
    	}	
    }
    

    2.2.2 将数据转成json格式响应

    public class AnimeJsonServlet extends HttpServlet {
    
    	private static final long serialVersionUID = -4726403189879316484L;
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doPost(req, resp);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		
    		// 模拟从数据库获取动漫列表
    		List animes = new ArrayList<>();
    		animes.add(new Animes(961, "玄幻", "斗破苍穹", "土豆", "萧炎", "玄机科技", "2019-08-04"));
    		animes.add(new Animes(962, "玄幻", "完美世界", "辰东", "石昊", "福煦影视", "2020-08-05"));
    		animes.add(new Animes(963, "言情", "狐妖小红娘", "小新", "白月初", "腾讯动漫", "2021-08-06"));
    		animes.add(new Animes(964, "言情", "秦时明月", "温世仁", "天明", "玄机科技", "2022-08-04"));
    		animes.add(new Animes(965, "热血", "镇魂街", "许辰", "曹焱兵", "卢李工作室", "2018-08-04"));
    		animes.add(new Animes(966, "热血", "雾山五行", "林魂", "闻人翊悬", "六道无鱼", "2018-08-04"));
    
    		//将集合数据,转换为json字符串,返回给前端
    		//阿里巴巴的fasejson,将集合转换为json字符串
    		String animesJson = JSON.toJSONString(animes);
    		
    		System.out.println(animesJson);
    		
    		//响应
    		resp.setContentType("text/html;charset=UTF-8");
    		resp.setCharacterEncoding("UTF-8");
    		resp.getWriter().print(animesJson);
    		
    	}	
    }
    

    3、获取并展示数据

    3.1 通过EL表达式取出request域域中的数据

    animeList.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    	
    		"Content-Type" content="text/html; charset=UTF-8">
    		动漫主页
    	
    	
    		

    "text-align: center">课工场KH96班动漫管理系统

    "text-align: center"> 名称:"text" name="animeName" size="15"/> 作者:"text" name="animeAuthor" size="15"/> 分类: "button" value = "搜索"/>

    "1px" width="90%" cellspacing="0" align="center"> "height: 80px; font-size: 30px; background-color: cyan;"> "height: 40px; background-color: cyan;"> "${animes}" var ="anime" varStatus="status"> "center"if test="${status.index % 2 == 1 }"> style = "background-color: pink;" if> >
    "8">动漫详情列表
    "8" style="text-align: right;">欢迎:  "logout">退出登录
    编号 分类 名称 作者 主角 出品 时间 操作
    ${anime.animeId } ${anime.animeCategory } ${anime.animeNaem } ${anime.animeAuthor } ${anime.animeActor } ${anime.animeProduce } ${anime.animeTime } "#">修改    |    "#">删除
    "8" style="height: 40px; text-align: center"> "button" value="添加" id="addAnime"/>   "#">首页 |  "#"><<上一页 |  "#">下一页>> |  "#">尾页 |  共 6 条  每页 10 条 当前第 1 页 / 共 1 页

    3.2 直接通过jQuery添加子标签

    animeListJson.jsp

    //tbody部分
    
        
    
    
    
    //处理成功返回的数据部分
    "success": function(data){
        //确定数据动态显示的位置
        var $tbody = $("tbody");
        //alert(data);
        //数据解析
    
        // 隔行变色
        var count = 1;
    
        // 数据解析
        $(data).each(function(){
            // 定义颜色
            var bgColor = count % 2 == 0 ? "style='background-color:#ddd;'" : "";
            $("tbody").append(
                " + bgColor + ">"
                + "" + this.animeId + ""
                + "" + this.animeCategory + ""
                + "" + this.animeName + ""
                + "" + this.animeAuthor + ""
                + "" + this.animeActor + ""
                + "" + this.animeProduce + ""
                + "" + this.animeTime + ""
                + "修改  删除"
                + ""
            );
            count++;
        });
    }
    

    展示效果:

  • 相关阅读:
    京准,NTP网络时间服务器在大型工厂应用方案
    生产升级JDK 17 必读手册
    Windows10安装麒麟桌面V10双系统
    商城系统架构设计与实现
    Banana Pi 开源社区发布BPI-M6开源硬件开发板,支持6.75TOPs算力
    鸿蒙HarmonyOS实战-ArkUI组件(Popup)
    微信小程序开发的OA会议之会议个人中心的页面搭建及模板,自定义组件的学习
    .NET MAUI 社区工具包 1.3版本发布
    使用香橙派 在Linux环境中安装并学习Python
    MySQL数据库性能优化方法,一篇给你总结了
  • 原文地址:https://www.cnblogs.com/xiaoqigui/p/16551683.html