Ajax分页问题
Ajax是大多数人在数据交互时都要用到的方法,当你从后台获取数据,如果这个数据比较庞大,那么分页问题就是必不可少的了。现在有个相对容易的方法(该方法基于jQuery),可以分享给大家 。
首先封装一个函数:
function queryByPage(con,curpage,eachpage,sql,param,func){
//这里con是指后台数据库的链接接口;curpage、eachpage是从你要查的第几条到第几条;sql是查询语句;param是参数,没有可以不写;func是回调函数。
if(!curpage || curpage <= 0){
curpage = 1;
}
if(!func){
func = param;
param = [];
}
con.query("select count(*) cnt from ("+sql+") t",param,function(e,r,f){
//获取总数量
var count = r[0].cnt;
//获取总页码
var maxpage = Math.ceil(count/eachpage);
// maxpage最大页数;count数据的总数;eachpage每页获取的数据数;Math.ceil取整+1(不管你的余数是大于5还是小于5,Math.ceil都会在取整的基础上+1)
sql += " limit "+((curpage-1)*eachpage)+","+eachpage;
var inner_con = getConAPI();
inner_con.query(sql,param,function(e,r,f){
var page = {"curpage":curpage,"maxpage":maxpage,"eachpage":eachpage}; func(e,r,f,page);
});
inner_con.end();
});}
exports.getCon = getConAPI;
exports.queryByPage = queryByPage;
封装了以上代码,在获取数据时我们只需调用就行了,比如:
exports.validatetable = function(req,resp){
var con = mysql.getCon();
var curpage = req.query.curpage;
//这里是查询总数据的1到5条
mysql.queryByPage(con,curpage,5,"select * from t_user",function(e,d,f,page){
if(e){
console.log(e);
}else{
//返回所有值和页数
resp.json({"data":d,"page":page});
}
});
con.end();
};
接收时只需生成分页标签就行了
var cur = parseInt(d.page.curpage);
//cur是页数;funLoad是数据加载时的函数,每次点击都需刷新;
var pageStr = "";
if(cur > 1){
pageStr += "<a onclick='funLoad("+ (cur-1) +")'>上一页</a>";
}
for(var i = 1;i <= d.page.maxpage;i++){
pageStr += "<a onclick='funLoad("+i+")'>"+i+"</a>";
}
if(cur < d.page.maxpage){
pageStr += "<a onclick='funLoad("+(cur+1)+")'>下一页</a>";
}
$("#page").html(pageStr);