zoukankan      html  css  js  c++  java
  • java学习day49-基于AJAX实践操作(活动模块)

    基于AJAX实践操作(活动模块)

    基于Ajax在springboot项目中实现查询加载操作

    服务端操作

    核心代码

    dao层代码实现

    @Mapper
    public interface ActivityDao {
        @Select("select * from tb_activity order by createdTime desc")
        List<Activity> findActivitys();
    
    }
    

    业务层代码

    @Service
    public class ActivityServiceImpl implements ActivityService {
    	@Autowired
    	private ActivityDao activityDao;	
    	@Override
    	public List<Activity> findActivitys() {
    		return activityDao.findActivitys();
    	}
    
    }
    

    控制层代码

    Spring MVC框架底层默认会使用jackson API将对象转换为json格式字符串

    @Controller
    public class ActivityController {
    	   @Autowired
    	   private ActivityService activityService;
        	//先给客户端返回一个页面,然后再返回数据
    	   @RequestMapping("/activity/doActivityUI")
    	   public String doActivityUI() {
    		   return "activity";
    	   }	   
    	   @RequestMapping("/activity/doFindActivitys")
    	   @ResponseBody  //此注解用于告诉spring mvc要对此方法的返回结果进行转换处理
    	   //假如方法返回值为对象(不包含字符串,直接量),spring mvc可以将其转换为json格式的字符串
    	   public List<Activity> doFindActivitys(){
    		   return activityService.findActivitys();
    	   }//Spring MVC框架底层默认会使用jackson API将对象转换为json格式字符串。
    }
    

    客户端操作

    核心代码

    ajax请求操作

    <div class="container">
        <table class="table">
            <thead>
                <tr>
                    <th><input type="checkbox">全选</th>
                    <th>名称</th>
                    <th>开始时间</th>
                    <th>结束时间</th>
                    <th>状态</th>
                    <th colspan="2">操作</th>
                </tr>
            </thead>
            <tbody id="tbodyId">
                <tr>
                    <td colspan="6"> 数据正在加载中。。。。。。</td>
                </tr>
            </tbody>
        </table>
    </div>
    

    通过文档就绪函数,当页面加载完成后,执行加载数据的函数.前提要引入jquery文件

    <script type="text/javascript" src="/jquery/jquery.min.js"></script>
    <script type="text/javascript" src="/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript">
    // $(document).ready(function{})
        //文档就绪函数
    $(function(){
        doGetActivitys();
    })
    //基于ajax技术向服务端发异步请求获取数据,然后更新的页面上。
    function doGetActivitys(){
        //1.定义url
        //var url="/activity/doFindActivitys";//当url"/"开头时表示这个url要替换掉浏览器中url端口号后面内容
        var url="doFindActivitys";//当url没有以“/”开头时,这个名字要替换掉浏览中最后一个"/"后面的内容
        //2.定义请求参数
        //3.发送异步ajax请求,处理响应结果
        //Jquery中GetJSON函数应用
        //向服务端发送Get请求,并将服务端返回的json格式字符串转换为json格式的js对象
        $.getJSON(url,function(result){//callback处理服务端响应的结果
            //debugger
            //获取tbody对象
            var tBody=$("#tbodyId");
            //清空tbody中内容
            tBody.empty();
            //迭代result对象,并将result内容追加到tbody中
            result.forEach(item=>tBody.append(doCreateRow(item)));
        })
    }
    function doCreateRow(item){
        //ES6中可以使用``替换字符串的连接,其内部取值可使用${}表达式
        return `<tr>
    <td><input type=checkbox value=${item.id}></td>
    <td>${item.title}</td>
    <td>${item.startTime}</td>
    <td>${item.endTime}</td>
    <td>${item.state==1?'有效':'无效'}</td>
    <td><button type='button' class='btn btn-warning btn-sm' 
    onclick='doDeleteById(${item.id})'>delete</button></td>
    </tr>`;
    }
    

    也可以通过字符串拼接的方式实现

    function doGetActivitys(){
        //定义url
        var url ="doFindActivity";
        //定义请求参数
        //发送异步请求,处理响应结果
        //向服务端发送get请求,
        $.get(url,function(data){//处理结果
            var tBody = $("#tBody");
            tBody.empty();
            //迭代data对象,
            for(var i =0;i<data.length;i++)
            	{
                //创建行
                var tr = doCreateRow(data[i])
                //追加
                tBody.append(tr);
            }
        },"json")//当返回的类型是json格式的字符串时,这里写json,若返回的是一个普通字符串可以写成text
    }
    function doCreateRow(item){
        return "<tr>"+
            "<td><input type='checkbox' value="+item.id+"/></td>"+
            "<td>"+item.title+"</td>"+
            "<td>"+item.startTime+"</td>"+
            "<td>"+item.endTime+"</td>"+
            "<td>"+item.state+"</td>"+
            "<td>"+delete+"</td>"+
            "</tr>"
    }
    

    细节分析:

    • 1 关于json的字符串转化

    1594209764402

    • 2 关于es6中使用``代替字符串拼接

    ES6中可以使用``替换字符串的连接,其内部取值可使用${}表达式

    "<tr>"+
         "<td><input type='checkbox' value="+item.id+"/></td>"+
    "</tr>"
    //注意:字符串拼接的时候,当外面使用双引号后,内部属性只能使用单引号
    可以转化为以下形式
    `<tr>
    <td><input type=checkbox value=${item.id}></td>
    </tr>`
    

    1594210165247

    • 3 关于路径的问题
    //var url="/activity/doFindActivitys";
    //当url"/"开头时表示这个url要替换掉浏览器中url端口号后面内容
    //var url="doFindActivitys";
    //当url没有以“/”开头时,这个名字要替换掉浏览中最后一个"/"后面的内容
    
    • 4 关于日期时间的格式化问题
    //此注解用于描述属性或set方法,告诉spring mvc 按指定格式接收客户端数据
    @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm")//应用场景对应set方法
    @JsonFormat(pattern = "yyyy/MM/dd HH:mm",timezone = "GMT+8")//此注解用于描述属性或get方法
    private Date startTime;//java.util.Date	
    @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm")
    //将一个对象转换为json格式字符串时,
    //底层会调用其get方法获取值,然后基于@JsonFormat定义的日期格式进行转换。
    @JsonFormat(pattern = "yyyy/MM/dd HH:mm",timezone = "Asia/Shanghai")//应用场景对应get方法
    
    • 5 加载数据之前,要将页面的提示信息删除掉
    tBody.empty();
    

    基于Ajax在springboot项目中实现删除加载操作

    服务端操作

    核心代码

    dao层代码实现

    @Mapper
    public interface ActivityDao {
        @Delete("delete from tb_activity where id=#{id}")
        int deleteById(Long id);
    
    }
    

    业务层代码

    @Service
    public class ActivityServiceImpl implements ActivityService {
    	@Autowired
    	private ActivityDao activityDao;	
    	@Override
    	public int deleteById(Long id) {
    	return activityDao.deleteById(id);
        }
    
    }
    

    控制层代码

    Spring MVC框架底层默认会使用jackson API将对象转换为json格式字符串

    @Controller
    public class ActivityController {
    	   @Autowired
    	   private ActivityService activityService;
        	//先给客户端返回一个页面,然后再返回数据
    	   @RequestMapping("/activity/doActivityUI")
    	   public String doActivityUI() {
    		   return "activity";
    	   }	   
    	   @RequestMapping("/activity/doDeleteById")
    	   @ResponseBody
    	   public String doDeleteById(Long id) {
    		   activityService.deleteById(id);
    		   return "delete ok";//此时返回的就是一个普通的字符串,在客户端进行处理的时候,需要按照text的格式进行处理.不能按照json格式字符串进行处理.
    	   }
    }
    

    客户端操作

    核心代码

    <button type='button' class='btn btn-warning btn-sm' 
    	  onclick='doDeleteById(${item.id})'>delete</button>
    <script>
    	function doDeleteById(id){
    	if(!confirm("确定删除吗"))return;
    	//定义url
    	var url="doDeleteById";
    	//定义参数
    	var params=`id=${id}`;//或者"id="+id
    	//发送异步请求执行删除操作
    	//基于jquery中post函数发送异步请求
    	$.post(url,params,function(result){//客户端与服务端通讯结束会回调此函数
    		alert(result);
    		doGetActivitys();//刷新
    	});
     }
    </script>
    

    细节分析:

    • 1 删除后需要再次展示最新的数据,需要再次异步访问,刷新数据
    $.post(url,params,function(result){//客户端与服务端通讯结束会回调此函数
    		alert(result);
    		doGetActivitys();//刷新
    	});
    
    • 2 关于获取当前行id
    onclick='doDeleteById(${item.id})'
    

    基于Ajax在springboot项目中实现新增加载操作

    服务端操作

    核心代码

    dao层代码实现

    mapper文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.cy.pj.activity.dao.ActivityDao"> 
        <insert id="insertObject">
            insert into tb_activity
            (title,category,startTime,endTime,remark,state,createdTime,createdUser)
            values
            (#{title},#{category},#{startTime},#{endTime},#{remark},1,now(),#{createdUser})
        </insert>
    
    </mapper>
    
    @Mapper
    public interface ActivityDao {
     int insertObject(Activity entity);
    
    }
    

    业务层代码

    @Service
    public class ActivityServiceImpl implements ActivityService {
        @Autowired
        private ActivityDao activityDao;	
        @Override
        public int saveObject(Activity entity) {
            return activityDao.insertObject(entity);
        }
    
    }
    

    控制层代码

    Spring MVC框架底层默认会使用jackson API将对象转换为json格式字符串

    @Controller
    public class ActivityController {
        @Autowired
        private ActivityService activityService;
    
        @RequestMapping("/activity/doSaveObject")
        @ResponseBody
        public String doSaveObject(Activity entity) {
            activityService.saveObject(entity);
            return "save ok";//返回的相当于是一个提示信息
        }
    }
    

    客户端操作

    核心代码

    使用模态框

    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">创建活动</button>
    
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title" id="myModalLabel">Modal title</h4>
                </div>
                <div class="modal-body">
                    <form method="post">
                        <div class="form-group">
                            <label for="titleId">标题</label>
                            <input type="text" class="form-control" 
                                   id="titleId" name="title"
                                   placeholder="please input  title">
                        </div>
                        <div class="form-group">
                            <label for="categoryId">类型</label>
                            <input type="text" class="form-control"
                                   id="categoryId" name="category"
                                   placeholder="please input  category">
                        </div>
                        <div class="form-group">
                            <label for="startTimeId">开始时间</label>
                            <input type="text" class="form-control" 
                                   id="startTimeId" name="startTime"
                                   placeholder="please input  startTime">
                        </div>
                        <div class="form-group">
                            <label for="endTimeId">结束时间</label>
                            <input type="text" class="form-control" 
                                   id="endTimeId" name="endTime"
                                   placeholder="please input  end time">
                        </div>
                        <div class="form-group">
                            <label for="remarkId">备注</label>
                            <textarea class="form-control" id="remarkId" 
                                      rows="3" cols="100" name="remark"
                                      placeholder="please input  end time"></textarea>
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary" onclick="doSaveOrUpdate()">Save changes</button>
                </div>
            </div>
        </div>
    </div>
    

    doSaveOrUpdate事件的实现

    function doSaveOrUpdate(){
        debugger
        //1.定义url
        var url="doSaveObject";
        //2.获取表单数据
        //serialize()为jquery中获取表单数据的一个函数
        var params=$("form").serialize();//title=A&category=CB&......
        //console.log("params",params);
        //3.异步提交表单数据,并处理响应结果
        $.ajax({
            "url":url,//请求url
            "method":"post",//请求方式
            "dataType":"text",//服务端响应数据类型
            "data":params,//向服务端传递的参数
            "success":function(result){
                console.log("result",result);
                //给出提示信息
                alert(result);
                //手动隐藏模态框
                $('#myModal').modal('hide');
                //清除表单原有数据
                $(".form-control").val("");
                //重新查询,刷新页面
                doGetActivitys();
            }
        });
    }
    

    细节分析:

    • 1 关于清除表单原有数据的方式
    //方式一:给数据设置为空字符串
    $(".form-control").val("");
    //方式二:重置表单信息
    $("form")[0].reset();
    
    • 2 关于响应数据的格式
    //服务端响应数据类型
    "dataType":"text"//服务端响应的数据是普通的字符串
    "dataType":"json"//服务端响应的数据是json个数字符串  
    
    • 3 手动隐藏模态框
      $('#myModal').modal('hide');
    
    • 4 ajax的规范书写模式

      url,method , dataType,data,success,error可带双引号也可以不带双引号

    $.ajax({
        "url":url,//请求url
        "method":"post",//请求方式
        "dataType":"text",//服务端响应数据类型
        "data":params,//向服务端传递的参数
        "success":function(result){
            //.....正确信息响应以及处理
        },
        "error":function(){
            //.....错误信息处理提示
        }
    
    • 5 获取提交的表单的数据的函数
    //serialize()为jquery中获取表单数据的一个函数
    var params=$("form").serialize();//title=A&category=CB&......
    
  • 相关阅读:
    增长思维——模式&&组织
    BackUP
    增长思维——机会
    Android
    增长思维——作战地图
    Server架构 小知识
    Server
    产品思维——创新模式
    产品思维——用户体验
    博客迁移到~http://zhulingyu.com
  • 原文地址:https://www.cnblogs.com/liqbk/p/13269248.html
Copyright © 2011-2022 走看看