1.感谢大家的关注和阅读,坚持干货不断~~~
2.今天我们来说一下如何通过ajax实现局部刷新。
在Java中,如果我们一个页面中有很多的信息都是从后台传递过来的,但是我们有的地方需有有变动。比如我们在做菜品管理,上下翻页时,我们的分类以及其他的信息一般是不需要刷新,只需要更新我们的菜品信息即可,如果跳转后台会浪费很长时间,如果我们使用ajax实现异步刷新。就可以在html中通过js对页面进行简单的控制实现局部刷新的效果。我们今天就以分页查询为例进行讲解!!!
1.后台的Java代码我就不再贴出来了,大家可以查看我的上一篇文章,Mybatis-Plus来学习一下!代码生成、分页插件?,可以通过mybatis-plus进行分页或者是使用mybatis的分页插件也可以,无论如何使用什么技术,相信实现分页对大家来说不是什么难事!!!
2.那我们直接来说一下视图层html的代码,我们简单的以饭店的商品管理为例:
html-1
html-2
可见当我们点击上下页、首尾页时,只需要对id=“main”的tbody标签中的tr进行更新即可。
3.接下来我们说一下javascript代码,我们需要实现的功能主要就是依靠他来实现。
javascript
相信大家已经看懂了,我的基本实现思路就是先将之前的数据从页面中删除,然后通过ajax向后台请求数据,然后将数据再动态的展示到页面上,就可以实现简单的动态刷新,然后以此可以实现很多功能。如上面的分页查询吗、信息更新等。
1.我的方式可能并不是最好的方式,但是倒也不失为一种方法。经过我的实验,还是蛮好用的。
2.感谢的大家的关注和阅读,希望大家可以给我提出更多的问题以及想法,为我提供素材和题目。
3.我会努力,保持更新。
4.干货不断,感谢!!!!
杰报表本身不含定时刷新功能,皕杰报表在web端可以加载到iframe中显示,那我们就可以用js刷新iframe来实现定时刷新。
1.准备一个测试报表,报表名为dssx,为了数据实时性,我获取系统日期来生成测试数据并生成图表
图表设计
2.将这个brt放到web应用下 WEB-inf/reports目录下(web端配置的报表存放根目录)。
3.修改config.xml里的runmode节点值为develop(开发模式,不启用报表缓存功能,实时刷新数据和报表模板,方便开发调试。)
4.在web应用下创建一下新的html,内容如下:
〈html>
〈head>
〈meta http-equiv="Content-Type" content="text/html; charset=utf-8">
〈style>
body{ text-align:center}
#rpt_div{margin:0 auto;border:1px solid #000;}
〈/style>
〈script language="javascript">
var chatIframeTimer = setInterval("chatIframeReload()",5000);//1000为1秒钟
function chatIframeReload()
{
document.getElementById('params_tbl').contentWindow.location.reload(true);
}
function chatIframeStop()
{
if(chatIframeTimer)
{
window.clearTimeout(chatIframeTimer);
}
}
〈/script>
〈/head>
〈body style="margin:10px;">
〈div id="rpt_div1">〈H1>局部刷新测试2019-5-27〈/H1>
〈p>〈button type="button" onclick='chatIframeReload()'>开始刷新〈/button> 〈button type="button" onclick='chatIframeStop()'>结束刷新〈/button>〈/p>
〈/div>
〈div id="rpt_div" style='width:600px;height:400px'>
〈iframe id="params_tbl" src="ReportEmitter?rpt=dssx.brt" scrolling="auto" style='width:100%;height:100%' frameborder="0" />
〈/div>
〈/body>
〈/html>
5.启动报表web应用并访问这个html文件。
点击 开始刷新按钮
每过5秒皕杰报表所在div就刷新一次,并且表格数据和图表中的数据一致。
Thyemlef动态刷新页面方法
最近在做项目,后端使用SSM架构,前端使用thymeleaf和bootstrap架构,在作用过程中,需要页面局部刷新,用到了3种方法,分别进行一下介绍。
## 一、bootstrap模态框
在管理员界面对员工进行修改时,一般都展示出清单,管理员可以在清单上对员工进行修改或其它操作,在本程序中,用到了添加员工、编辑员工信息,都采用弹出模态框的方法。

实现的代码如下:
1、按钮功能实现
```javascript
添加与编辑用户按钮,指出模态框,并在jquery也没有函数中对输入框赋值。
<input type="button" value="添加用户" data-toggle="modal" data-target="#addUserModal" class="btn btn-info" style="margin-left: 10px"/>
编辑按钮中,还需要将对象参数传递进去,以便修改正确的人员
<div class="btn btn-default btn-group-xs" role="group" aria-label="修改"
th:id="${'user-modify-'+record.id}"
th:edit-data-id="${record.id}"
data-toggle="modal" data-target="#addUserModal"
onclick="return get_employee_info(this)">编辑
</div>
```
2、JQERY函数实现
函数中根据按钮参数,通过ajax从后台获取数据,并显示模态框上。
```javascript
function get_employee_info(e) {
var id = e.getAttribute("edit-data-id");
if (!id) {
alert('Error!');
return false;
}
$.ajax(
{
url: "/getEmployee",
data: {"id": id},
type: "get",
beforeSend: function () {
//$("#tip").html("<span style='color:blue'>正在处理...</span>");
return true;
},
success: function (data) {
if (data) {
// 解析json数据
var data_obj = data;
// 赋值
$("#id").val(data_obj.id);
$("#name").val(data_obj.name);
$("#department").val(data_obj.department);
$("#section").val(data_obj.section);
$("#cardId").val(data_obj.cardId);
$("#mobilePhone").val(data_obj.mobilePhone);
$("#managerLevel").val(data_obj.managerLevel);
$("#company").val(data_obj.company);
$("#manageDepartment").val(data_obj.manageDepartment);
} else {
$("#tip").html("<span style='color:red'>失败,请重试</span>");
// alert('操作失败');
}
},
error: function () {
alert('请求出错');
},
complete: function () {
// $('#tips').hide();
}
});
return false;
}
```
3、模态框实现代码
```javascript
<!-- 模态框示例(Modal1) -->
<form method="post" action="" class="form-horizontal" role="form" id="employee" onsubmit="return edit_employee()"
style="margin: 10px;">
<div class="modal fade" id="addUserModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="myModalLabel">
用户信息
</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" role="form">
<div class="form-group">
<label for="id" class="col-sm-3 control-label">用户ID</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="id" name="id" readonly>
</div>
</div>
<div class="form-group">
</div>
***。。。中间省略其它字段。。。***
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" style="margin-left: 200px">
关闭
</button>
<button type="submit" class="btn btn-primary" >
提交
</button>
<span id="tip"> </span>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
```

## 二、th:fragment代码段
fragment代码段,可以用jquery局部刷新
```javascript
<!--明细清单,做成点南上面图标时局部刷新-->
<div class="statList" th:fragment="statList" id="statList">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<table class="table table-bordered table-hover table-responsive">
<thead>
...省略其它代码。
</div>
```
下面是更新代码, 上面代码段名称为: $(".statList").html(data);,下面函数是统计图标的点击后,触发查询功能,对统计图表的数据进行下钻查询。功能是通过ajax获取后端数据,然后在前端显示。
```javascript
function refreshStatList(codeColor) {
var department = $('#departmentList').val();
$.ajax({
type: "post",
async: true,
url: "/statQueryList",
data: {
"department": department,
"codeColor": codeColor
},
success: function (data) {
$(".statList").html(data);
//将选择值保存到而面,供导出时使用
$("#selectCodeColor").val(codeColor);
},
error: function (errorMsg) {
//请求失败时执行该函数
alert("局部刷新失败!");
}
})
}
```
## 三、ajax局部刷新
利用jquery函数,利用ajax需要时从后台获取数据,然后通过前端对象名,对相应内容赋值,实现局部刷新。
```objectivec
$("#tip").html("<span style='color:blue'>正在处理...</span>");
//给日期字段赋值,只能取前面年月日,并以-号分隔,否则前端不回显
if (data_obj.quarantineStart != null) {
$("#quarantineStart").val(data_obj.quarantineStart.substring(0, 10));
} else {
$("#quarantineStart").val(null);
}
```
老伍,2020.3.17
*请认真填写需求信息,我们会在24小时内与您取得联系。