jquery线程锁效果

有两个事件,同时调用一个方法,网上快的时候还好,网上慢的时候就出现了重复调用的效果,。

看到jquery有两个方法$.Callbacks();   $.when();

$.Callbacks();   执行一个或者多个回调函数

$.Callbacks('once');//执行一次

callbacks.add(loadContext);//添加一个函数

callbacks.fire(b);//执行callbacks中所有函数

$.when();  当函数执行    

$.when(function).done(function)当when中function执行完成,并且成功,执行done中function

利用这个两个性质:

var num=0;//默认加载页数
var length=1;//用于添加序号
var url='../text/getList.do';	// jsonp获取数据的地址
var callbacks = $.Callbacks('once');//在加载中可能碰到多次加载问题,设置函数只执行一次
	callbacks.add(loadContext);
	/**
	 * 加载更多数据
	 * @param b 判断是滚动加载,还是点击加载
	 */
function do_more(b){
	//callbacks.fire(b);
	$.when(callbacks.fire(b)).done(
	function(){callbacks = $.Callbacks('once');//在加载中可能碰到多次加载问题,设置函数只执行一次
			   callbacks.add(loadContext);});
};
/**
 * 向服务器获取当前页数数据,获取完成,页数+1。当获取到最后一页,页数设置为-1,不再向服务器发送请求
 * @param b 是否鼠标滚轮滚到最底下
 */
function loadContext (b){
	var dtd = $.Deferred();
	if(num==-1){//如果数据库已经没有数据,不再重新请求。
		alert('已经最后一条!');
		return;
	}
	/**
	 * 发送请求
	 * @num 多少页
	 * @data 一个json集合,包含,data(数据),size(当前获取到的条数),length(每页显示多少条)
	 */
	$.getJSON(url+'?num='+num,function(data){
		if(data.size==0){
			num=-1;
			if(b){
				return false;
			}
			alert('已经最后一条!');
			return false;
		}else{
		//do more...
		}
		dtd.resolve(); // 改变Deferred对象的执行状态
		return dtd.promise(); // 返回promise对象
	});



转载于:https://my.oschina.net/u/1455583/blog/493793

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值