最近项目大量需要ajax分页,于是便有了编写一个适用于各种情况的ajax分页需求。
虽然规定了分页全部由前端完成,后端只负责发给前端一个总数,后端根据前端发过来的第几项至第几项去数据库查取并返回,但是开发团队人多,又可能存在JSON数据格式不统一的情况。
例如:
php工程师1要求发送格式为:
1 | {action:"getlist", start:10, end:20};而返回数据为:{total:500, data:[...]} |
php工程师2要求发送格式为:1
{ac:"ajaxpage", startnum:10, endnum:20};而返回数据为:{all:500, data:[...]}
等等。。。
再加上分页样式各不相同,可能有些只有上下页,而有些可以直接跳转到指定页,而有的分页样式说不定是红色的,而有的是蓝色的。有些需要分的数据是新闻,而有些人员列表和头像…
从目前来看,我们的代码只剩下复制粘贴了,别无他法。
而我最近编写的 jquery.spout.ajaxpage 插件,可以轻松解决这个问题。jquery.spout.ajaxpage 插件只是提供最基本的一些属性和方法,对于显示层面上的东西不做涉及,完全由用户自定义回调函数来解决。
jquery.spout.ajaxpage源码、API、实例测试代码:
https://github.com/DoubleSpout/jquery.spout.ajaxpage
我们先来看下API,看完API相信大家就知道如何使用了,API很简单:
ajaxpage API:
1、option参数说明:
1 | 用法:var ajaxpage = new Spout_ajaxpage(option); |
2、Spout_ajaxpage实例对象的属性:
1 | 用法见: https://github.com/DoubleSpout/jquery.spout.ajaxpage |
3、Spout_ajaxpage实例对象的方法:
1 | 用法见: https://github.com/DoubleSpout/jquery.spout.ajaxpage |
非红色部分大家一目了然,需要注意的是红色部分。
1、option中的data选项,例如:后端要求我们每次都发送 {action:”getlist”, start:10, end:20} 这样的格式,
只需将data设置为:{action:”getlist”, start:“$spage”, end:“$epage”}
2、option中的totalkey,表示后端返回给前端的JSON数据格式中哪个KEY代表记录总数,例如:
后端返回给前端数据格式为:{all:500, data:[…]},这里的记录总数KEY便是all,只要将option.totalkey设置为”all”就可以了。
3、option中的putcallback回调函数,这个回调函数是最关键的,即是每次ajax数据返回以后执行,接收2个参数,第一个参数为data,是从后端返回的完整JSON数据,第二个参数是Spout_ajaxpage的实例对象,它包含API上所列举的属性和方法。我们还是来看下实例:1
2
3
4putcallback : function(data, obj){
$('#content').html(data.content);//更新数据列表
$('#status').html('每页'+obj.pagenum+'条记录,总共'+obj.total+'条记录, 当前是第'+obj.curpage+'页,共有'+obj.allpage+'页,当前S和E的值为:'+obj.start+'/'+obj.end);//更新分页信息
}
回调函数是用来更新数据列表和更新分页信息的,当然你可以根据你的需要做其他任何事情。注意:这个回调是在每次ajax返回时才会执行的,也是下面Spout_ajaxpage的实例对象的其他方法默认回调函数。
4、Spout_ajaxpage的实例对象的first([callback])方法,这里重点要说的是参数callback,这是一个可选项,你可以单独为这个方法定义回调,也可以不传callback方法使用默认的即option.putcallback 方法,同样也是接收2个参数。
5、Spout_ajaxpage的实例对象的intial()方法,将重新计算总数和分页,并跳转到第一页。可能有些页面的数据在不断更新,而这个页面用户又不希望按F5来进行刷新,比如左边在看足球直播,而右边是用户留言列表。当然我们可以用comet服务器推或者flash socket等来实现,这边不做讨论。对于有分页需求来说可能1分钟前有50条留言,但是1分钟以后就有70条留言了,调用这个intial()方法可以让jquery.spout.ajaxpage再进行一次初始化分页,保证数据的更新。