使用jQuery和Ajax请求实现分页效果

在要求分页的程序中,我们一般会知道如下几个数据的参数:

总记录数count

每一页要显示的记录数:size

当前页:num

总页数我们可以通过count和size得到,在JS中可以使用Math.ceil()


编写我们的JS分页脚本page.js
//定义一个Page函数,接收两个参数,总记录数和参数列表
var Page = function(count,params){
	this.size=10;//初始化每一页显示10条数据
	this.num=1;//当前页为第一页
	this.count=count;
	this.url;//定义一个url
	this.cacheKey=Math.random();//定义一个随机数,保证在ajax传输的时候唯一地址,防止缓存提交
	this.sumNum = function(){//得到总页数
		return Math.ceil(this.count/this.size);
	};
	this.params = {};//定义一个参数列表
	this.first=function(){//首页
		this.show(1);
	}
	this.last=function(){//最后一页
		this.show(this.sumNum());
	}
	this.next=function() {//下一页
		this.show(this.num + 1);
	}
	this.prev=function() {//上一页
		this.show(this.num - 1);
	}
	this.show=function(num) {//处理页面函数
		if(num>0&&num<=this.sumNum()){
			this.num = num;
                        //构造页面地址参数
                       var args = {'pager.offset':(this.num-1)*this.size,'page.size':this.size,'_temp':this.cacheKey};
			for(p in this.params){
				args[p] = this.params[p];
			}
			$.get(this.url,args,function(data){
				showJson(data);//将异步请求的json数据显示出来
			});
			delete args;
		}
	}
	this.reload=function(){//重新加载
		this.clearCahce();//清除缓存
		if(num>0&&num<=this.sumNum()){
			this.show(this.num);
		}else{
			this.show(1);
		}
	}
	this.clearCahce=function(){
		this.cacheKey=Math.random();//改变key的值
	}
	this.bindForm=function(id){//绑定到表单中中
		$(function(){
			$('#'+id+' input[type=text]').each(function(i,input){
				if($(input).val()!=''){
					page.params[$(input).attr('name')] = $(input).val();
				}
			});
			$('#'+id+' input:checked').each(function(i,input){
				if($(input).val()!=''){
					page.params[$(input).attr('name')] = $(input).val();
				}
			});
			$('#'+id+' select').each(function(i,s){
				if($(s).find('option:selected').val()!=''){
					page.params[$(s).attr('name')] = $(s).find('option:selected').val();
				}
			});
			$('#'+id).bind('submit',function(f){
				for(var i=0;i<form.length;i++){
					if(form[i].value==''){
						$(form[i]).removeAttr('name');
					}
				}
			});
		});
	}
}
要在前台页面做显示,我们一般是有我们定义的分页样式,例如:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
    <table>
	  <tr>
	    <th>编号</th>
	    <th>姓名</th>
		<th>年龄</th>
		<th>性别</th>
	  </tr>
	<c:forEach items="${users}" var="users">
	  <tr>
	    <td>${users.userId}</td>
		<td>${users.userName}</td>
		<td>${users.userAge}</td>
		<td>${users.userSex}</td>
	  </tr>
	</c:forEach>
	<table>
    <div class="flickr">
       当前页:<span id="currentPage">0</span>/<span id="sumPage">0</span> 页
       	       <a href="javascript:void(0);" onclick="page.first();">首页</a>
	       <a href="javascript:void(0);" onclick="page.prev();">上页</a>
       	       <a href="javascript:void(0);" onclick="page.next();">下页</a>
	       <a href="javascript:void(0);" onclick="page.last();">末页</a>
       	       总共<span id="count" style="color: red;"></span>条
    </div>
 </body>
</html>

调用page.js和编写我们的脚本语句
<script type="text/javascript" src="page.js"></script> 

<script type="text/javascript">
	var basePath = "<%=preBasePath%>";
	var page = new Page();
	
	//初始化菜谱Page
	function initPage(count){
		page.count = count;
		page.url = basePath+"orderAction!ajaxDish.do?resId="+resId+"&preId="+preId;
		$('#currentPage').html(page.num);
		$('#sumPage').html(page.sumNum());
		$('#count').html(page.count);
	}

	$(function(){
		initPage(${orderPageModel.count});
	});
</script>
我们在OrderAction中编写我们的ajaxDish方法

	/**
	 * Ajax 获取菜谱
	 */
	public String ajaxDish() throws Exception{
		PrintWriter writer = response.getWriter();
		try{
			int resId = Integer.parseInt(request.getParameter("resId"));
			int preId = Integer.parseInt(request.getParameter("preId"));
			PageModel pageModel = null;
			if(preId==0){ //查询全部
				pageModel = restaurantDishDao.findPageModelDishes(resId);
			}else{
				pageModel = restaurantDishDao.findPageModelDishesOfPreferentialId(resId, preId);
			}
			JSONObject object = new JSONObject();
			object.accumulate("resId", resId);
			object.accumulate("preId", preId);
			object.accumulate("count", pageModel.getCount());
			object.accumulate("data", pageModel.getDatas());
			response.setContentType("text/plain");
			response.setCharacterEncoding("UTF-8");
			writer.print(object.toString());
		}catch(Exception e){
			throw e;
		}finally{
			writer.flush();
			writer.close();
		}
		return null;
	}








                
为了设计款能够有效聚合校园生活信息的APP,首先需要从用户的需求出发,详细分析目标用户群体的特点和需求,即XXXX生的日常生活和学习需求。在此基础上,定义APP的核心功能和服务范围,包括但不限于选课指南、考试资源、兼职信息、生活充值等服务。 参考资源链接:[校园生活APP:服务XXXX生的创新创业计划](https://wenku.youkuaiyun.com/doc/7ji9n8gsq2?spm=1055.2569.3001.10343) 接下来,进行市场调研,了解同类APP的现状、优缺点以及目标用户对此类APP的使用体验反馈。这步骤将帮助我们确定产品的差异化特征,并据此制定出创新点和改进方向。 根据调研结果,设计APP的架构和用户界面。架构设计要考虑到数据的高效采集、存储、处理和展示,以及第三方平台的接口对接。用户界面设计则需要注重用户体验,确保操作简便、界面友好。 确定技术路线后,开始APP的开发工作。开发过程中,选择合适的开发工具和框架,如React Native或Flutter等跨平台开发框架,可以快速构建iOS和安卓双端应用。对于数据聚合,可以利用爬虫技术定时从校园网站、合作伙伴网站等来源抓取信息,并存储于服务器。开发中还应考虑到数据的安全性和隐私保护措施。 对于信息的更新及时性与准确性,可以设立后台管理系统,由专业团队负责日常的信息维护和更新,同时设置用户反馈机制,鼓励用户上报错误信息或提出建议。利用机器学习等技术优化信息分类和匹配准确性。 测试阶段,进行全面的系统测试、性能测试和用户测试,确保APP的稳定性和易用性。在APP上线后,进行持续的监控和迭代更新,根据用户反馈不断优化功能和提升服务质量。 总结来说,开发款校园生活APP需要深入理解用户需求,合理规划产品功能,采用合适的开发技术和架构,并且注重后期的运营和维护。为了深入了解如何将这些步骤具体实现,建议参考《校园生活APP:服务XXXX生的创新创业计划》。这份文档不仅提供了产品规划的全面视角,还包括市场分析和运营策略,是解决当前问题的有力支持。 参考资源链接:[校园生活APP:服务XXXX生的创新创业计划](https://wenku.youkuaiyun.com/doc/7ji9n8gsq2?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值