利用Boostrap Table自动获取最新数据(没有刷新效果)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37355951/article/details/79650735

    概述:如何获取最新数据,定时任务自动刷新,但是如果利用Boostrap Table 的refresh或load方法,虽然能完成这个功能,问题是这样刷,整个页面会闪动一下。那么如何没有闪动这个不好效果,就要利用Bootstrap append方法。append就是连接问题,那么问题来了,如何去除重复数据?

方法一:可以选中整个表所有数据,然后一个一个剔除。(这是正常常规方法)。

方法二:是不是可以记录一下最后一条数据,怎么记录?然后你将这个作为条件参数传入后台查询数据库(这样可以减少查询数据量和Bootstrap比较的次数),打算采用第二种方法

1、前提条件

  • 引入jquery.js, 笔者采用是版本 v1.11.1
  • 引入Boostrap  笔者采用是版本 bootstrap-3.3.7-dist
  • 引入Bootstrap Table   最新版

2、引入css和js

css:注意修改成你的href


js: 注意修改成你的src


html:

<table id="table">
</table>

3、自定义js

更新时间:2018年3月22日14:21:31

更新内容:增加sortName:'creTime',  增加一个排序列,采用降序 (防止maxId(等于每页显示数量)对应是本页最大值)

<script type="text/javascript" charset="utf-8">
	var maxId=0;  //保存主键最大值
		$('#table').bootstrapTable({
			url : '/demo/coffee/getCoffee',
			pagination : true,  //展示分页
			showFooter : false,  //展示页脚
			showHeader : true,  //展示页头
			striped : true,    //深浅颜色条纹行
			sortName: 'creTime',  //以时间为排序列
			sortOrder:"desc",  //降序
			columns : [ {
				checkbox : true
			}, {
				field : 'id',
				title : '序号',
				//visible : false, //注意这个要可见,否则下面Formatter不会执行
				formatter : function(value, row, index) {
					if(value>maxId){
						console.log(maxId);
						//主键最大值
						maxId = value;
					}
					return value;
				}
			} /* , {
				title : '序号',//标题  可不加  
				formatter : function(value, row, index) {
					return index + 1;
				}
			} */, {
				field : 'name',
				title : '名称',
				visible : false
			}, {
				field : 'status',
				title : '状态',
				formatter : function(value, row, index) {
					if (value == 0) {
						return '禁用';
					} else if (value == 1) {
						return '启用';
					}

				},
				visible : false
			}, {
				field : 'opt',
				title : '内容'
			}, {
				field : 'creTime',
				title : '创建时间',
				sortable: true,
				formatter : function(value, row, index) {
					if(value==null){
						return "-";
					}
					return formatterDate(value);
				}
			}]
		});
		//定时任务调用
		var timer2=window.setInterval(function(){
			getFreshData();
			console.log(maxId);
		},1000); 
		
		function getFreshData(){
			//继续查询命令执行状态
			 $.ajax({
					url : '/demo/coffee/getCoffee?id='+maxId,  //作为参数传入后台进行检验,只查询大于这个maxId的数据
					method : 'get'
				}).done(function(msg) {
					var array = eval('('+msg+')');
					//将数据追加到表格中
					$('#table').bootstrapTable('append', array);
					
				});
		}
		function formatterDate(value) {
			var da = new Date(value);
			var year = da.getFullYear() + '-';
			var month = da.getMonth() + 1 + '-';
			var date = da.getDate() + ' ';
			var hour = (da.getHours() > 9 ? da.getHours() : '0' + da.getHours())
					+ ':';
			var min = (da.getMinutes() > 9 ? da.getMinutes() : '0'
					+ da.getMinutes())
					+ ':';
			var sec = (da.getSeconds() > 9 ? da.getSeconds() : '0'
					+ da.getSeconds());
			return [ year, month, date, hour, min, sec ].join('');
		}
	</script>

关键位置:

  • id字段中Formatter函数中保存当前最大主键值
  • 定时任务调用

url : '/demo/coffee/getCoffee?id='+maxId,   注意换成你自己请求地址

4、整个文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet"
	href="../bootstrap-3.3.7-dist/css/bootstrap.min.css"></link>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="../css/bootstrap-table.min.css">
</head>
<body>
	
	<table id="table">

	</table>
	<script type="text/javascript" src="../lib/jquery.js"></script>
	<script type="text/javascript"
		src="../bootstrap-3.3.7-dist/js/bootstrap.min.js" ></script>
	<!-- Latest compiled and minified JavaScript -->
	<script src="../lib/bootstrap-table.min.js" ></script>

	<!-- Latest compiled and minified Locales -->
	<script src="../lib/bootstrap-table-zh-CN.min.js">
		
	</script>
	<script type="text/javascript" charset="utf-8">
	var maxId=0;  //保存主键最大值
		$('#table').bootstrapTable({
			url : '/demo/coffee/getCoffee',
			pagination : true,
			showFooter : false,
			showHeader : true,
			striped : true,
			sortable: true,
			sortOrder:"asc",
			columns : [ {
				checkbox : true
			}, {
				field : 'id',
				title : '序号',
				//visible : false, //注意这个要可见,否则下面Formatter不会执行
				formatter : function(value, row, index) {
					if(value>maxId){
						console.log(maxId);
						//主键最大值
						maxId = value;
					}
					return value;
				}
			} /* , {
				title : '序号',//标题  可不加  
				formatter : function(value, row, index) {
					return index + 1;
				}
			} */, {
				field : 'name',
				title : '名称',
				visible : false
			}, {
				field : 'status',
				title : '状态',
				formatter : function(value, row, index) {
					if (value == 0) {
						return '禁用';
					} else if (value == 1) {
						return '启用';
					}

				},
				visible : false
			}, {
				field : 'opt',
				title : '内容'
			}, {
				field : 'creTime',
				title : '创建时间',
				sortable: true,
				formatter : function(value, row, index) {
					if(value==null){
						return "-";
					}
					return formatterDate(value);
				}
			}]
		});
		//定时任务调用
		var timer2=window.setInterval(function(){
			getFreshData();
			console.log(maxId);
		},1000); 
		
		function getFreshData(){
			//继续查询命令执行状态
			 $.ajax({
					url : '/demo/coffee/getCoffee?id='+maxId,  //作为参数传入后台进行检验,只查询大于这个maxId的数据
					method : 'get'
				}).done(function(msg) {
					var array = eval('('+msg+')');
					//将数据追加到表格中
					$('#table').bootstrapTable('append', array);
					
				});
		}
		function formatterDate(value) {
			var da = new Date(value);
			var year = da.getFullYear() + '-';
			var month = da.getMonth() + 1 + '-';
			var date = da.getDate() + ' ';
			var hour = (da.getHours() > 9 ? da.getHours() : '0' + da.getHours())
					+ ':';
			var min = (da.getMinutes() > 9 ? da.getMinutes() : '0'
					+ da.getMinutes())
					+ ':';
			var sec = (da.getSeconds() > 9 ? da.getSeconds() : '0'
					+ da.getSeconds());
			return [ year, month, date, hour, min, sec ].join('');
		}
	</script>
</body>
</html>

涉及后台查询到数据库,你可以参考Spring+SpringMVC相关内容

这里只是抛砖引玉的。

猜你喜欢

转载自blog.csdn.net/m0_37355951/article/details/79650735