有两个事件,同时调用一个方法,网上快的时候还好,网上慢的时候就出现了重复调用的效果,。
看到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对象
});