
在进行分页查询时,如果不想使用第三方的分页插件ipage,我们可以使用原生的数据分页方式,即在SQL语句中使用LIMIT关键词。
具体 *** 作如下:
1 在SQL语句中使用LIMIT关键词,指定每页显示数据的数量和当前页的起始位置。例如:SELECT FROM table LIMIT 10,20;表示从第11条数据开始,取出20条数据进行展示。
2 在页面中设置上一页和下一页的链接,根据当前页码计算出上一页和下一页的页码,再拼接成相应的URL地址,跳转至对应的页面。
3 在页面中显示当前页码、总页数、数据总数等信息,以方便用户进行翻页 *** 作。
需要注意的是,在使用LIMIT关键词进行分页查询时,要保证查询结果的正确性和效率,避免因为查询数据量过大导致SQL语句执行缓慢或消耗过多的系统资源。因此,建议在进行分页查询时尽量使用有索引的字段筛选数据,并合理设置分页数,以达到最佳的查询效果。
//以下将以jqueryajax为例,演示一个异步分页
function demo(curr){
$getJSON('test/demo1json', {
page: curr || 1 //向服务端传的参数,此处只是演示
}, function(res){
//此处仅仅是为了演示变化的内容
var demoContent = (new Date()getTime()/Mathrandom()/1000)|0;
documentgetElementById('view1')innerHTML = rescontent + demoContent;
//显示分页
laypage({
cont: 'page1', //容器。值支持id名、原生dom对象,jquery对象。如该容器为:<div id="page1"></div>
pages: respages, //通过后台拿到的总页数我还是比较推荐你去后盾人上面看看里面有很多这类php之类的教学讲解视频哦
layUI实现前端分页和后端分页
本文实例为大家分享了layUI实现前端分页和后端分页效果,供大家参考,具体内容如下
layui后端分页:
function pagination(curr,gwayId,mlity,ePart) {
$("manage_ys_list")html('加载中');
let dd={
conditions: {
gatewayId:gwayId,
searchText:"",
pageSize:15,
pageIndex:curr-1
},
identity:{
"userName":userName1,
"sessionId":sessionId1,
"token":token2
}
}
$ajax({
type:"POST",
dataType: 'json',
url:UserListPaged,
data:dd,
headers:{ 'X-Requested-With': 'XML>
首先,最简单的先渲染一个表格,参考官方示例:
这里先讲讲一些渲染细节:
layui内部就是根据cols属性里面每项的field字段来输出数据(该字段跟后台返回的数据字段一致即可输出)。
另外,layui拼接html字符串的方式多次应用数组join方法的方式,这种方式值得安利一波:
否则用传统方式拼接html字符串就相形见绌了(不推荐):
接着,看一下分页:
从图中可以看出,我们请求地址没加请求参数,layui自动帮我们添加了page,limit的请求参数,默认值分别为1, 10,这是开启了分页的缘故(page: true)。那么,请求参数名是否可以定制呢?答案是可以的,参考request属性:
同样,响应参数名也是可以定制的,参考response属性:
注意,以上只是定制了参数名字而已,接下来才是重头戏:定制数据格式,参考parseData属性:
parseData可以帮助我们定制好与layui对应的表格数据格式,从而输出表格,这是很有用的,毕竟后端前辈返回的数据格式未必跟layui的一致呀。有了以上3种定制方式,我们就不惧输出数据表格了。采用这种方式输出的就是真正的实现了分页,下文提及的方式可不是真正的分页。
-----------------------快乐的分割线,前方jojo高能-----------------------
可能也有小伙伴无视了 request、response、parseData 三剑客,转而用起了data属性,过程如下:
拒绝了使用url属性请求,转用jquery ajax请求数据,最后再tableInsreload({ data: resdata })一波,达成666 *** 作。
这种做法从结果上看,似乎是可以的。。。。。。搭嘎,口头挖撸。
因为通过data属性赋值是不会分页去请求后端的,而是直接请求全部数据,然后layui内部进行前端分页处理,这样一来,如果数据量大的话,恐怕页面就要刷好一会儿了o(╥﹏╥)o。(只有通过data方式赋值才会进行前端分页处理,所以url方式可以放心食用)。
热身话题
在开发的过程中,大量数据的展示大多采用表格的方式,直观,清晰。在这里,我也使用过一些框架Bootstraptable ,Dev table ,layui table。本次采用的layui table。用表格展示数据的同时会提供丰富的查询条件去筛选相应的数据。由于大量的数据,一般都会使用分页的形式去查询数据,框架中带有这种功能。
底部分页栏效果图
上方查询栏效果图
问题来源
首次进入页面或者页数停留在第一页使用查询栏查询时能够查询到数据。当分页切换到第二页时,再使用查询栏查询,可能查不到数据。(为什么说是可能?后面会给出解释)
理想方法
①在查询提交参数时,添加一个参数 page:1
layui中通过where提交参数 where:{ search:{'USER_NAME':'汪菜菜'},page:1}
注:此方法虽然看似解决了问题,实际存在巨大的bug。你会发现使用查询栏后当你选择任一页时请求后台的page参数都为1,也就是无论选择哪一页得到的结果都是第一页的数据。
②自己也找过资料,说要把请求参数写成下方这种形式,测试结果也并未解决问题,和不加的效果相同,不知道时因为后台处理问题还是其他问题。
var Table = {
ID: "tb",
page: {
curr: 1
},
Where: {
search: JSONstringify(jsondata),
}
};
怎么肥四,难道是layui更新了吗,之前我使用这个解决方式是不行滴,目前此解决方法是可行的。2019-12-17
在使用layui 的过程中还是发现无法满足开发需求,后期将使用dev表格框架。
问题解析
表格有自带的分页功能,后台分页主要是通过传参 {limit:15,page:1} ,表示当前页数为第一页,每页显示15条数据,两个参数来控制分页的分页查询。假设当前有三十条数据,则初始化表格时,显示两页,总数30,页数为1,数据源为1-15条数据。当我们添加查询条件时,假设我通过模糊查询 “汪” 能在 30 条数据中查询到 10 条数据 ,当前页数为第一页,查询的数据进行分页{limit:15,pa
如上图所示,要扣除里面的表格数据,该怎么弄呢?思路是先把整个表格抠出来,然后按照tr进行分割,存到数组,然后一个个遍历进行正则匹配,最后输出结果转化为json格式,供前台调用!
<phpclass getHtmlChar {
var $url; var $pattern_find; var $pattern_replace; var $timeout; /
@param url 需要抓取的url链接
@param pattern_find 需要匹配的字段正则表达式
@param pattern_replace 需要替换的字符正则表达式
@param timeout 设置超时阻断程序执行,默认10秒,这个字段一般留空
/
function __construct($url, $pattern_find, $pattern_replace, $timeout) {
$this->url = $url; $this->pattern_find = $pattern_find; $this->pattern_replace = $pattern_replace; $this->timeout = 10;
} // 获取网页源代码
function getHtml() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/50 (Windows NT 61; WOW64) AppleWebKit/53736 (KHTML, like Gecko) Chrome/3401847131 Safari/53736'); //模拟浏览器,防止被拦截
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout); $html = curl_exec($ch); // 匹配需要的大的字段,例如一段table,取出来之后再一行一行做匹配
preg_match($this->pattern_find, $html, $match); //判断是否有传入替换的正则表达式,如果有就进行匹配替换,并返回替换后的字符串,如果没有,则直接返回匹配出来的大段,例如整个table表格
// echo "<pre>";
// print_r($match);
// echo "</pre>";
// exit;
if (!empty($this->pattern_replace)) { return preg_replace($this->pattern_replace, '', $match[0]);
} else { return $match[0];
}
} // 传入正则和需要处理的字符串,返回的是匹配到的数组
function prgMatche($pre_all, $strs) {
if (!is_string($strs)) { echo '传入的不是字符串!请检查!<br>'; echo "<pre>";
print_r($strs); echo "</pre>"; exit;
}
preg_match_all($pre_all, $strs, $matches); return $matches;
} // 获取表格表头
function getTableJson() {
// 获取一行一行tr
$trs = $this->prgMatche('/<tr([\s\S]+)<\/tr>/i', $this->getHtml()); // 获取表头
$ths = $this->prgMatche('/<th>([\s\S]+)<\/th>/i', $trs[1][0]); // 获取行数,循环匹配的时候需要用到
$num = sizeof($trs[1]); // echo $num;
// 一行一行匹配表格数据
for ($i = 1; $i < $num; $i++) { $tr = $this->prgMatche('/td>([\s\S]+)<\/td>/i', $trs[1][$i]); $tds[] = $tr[1];
} // 把表头和表数据存入json
array_unshift($tds, $ths[1]); // 返回一个数组,0为json格式数据,1为数组格式数据
return [json_encode($tds), $tds];
}
}// 以下是调用这个类的例子$url = '>
以上就是关于分页查询不用ipage用啥全部的内容,包括:分页查询不用ipage用啥、使用layui前端框架,进行分页,php怎样传递数据、layui前端分页不要每次调后端等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)