0

我有一个匿名函数来检测用户是否滚动到窗口底部。在匿名函数内部,我调用了一个需要一段时间才能完成的数据库。

var allowing_more = 1;

$(window).scroll(function() {
    if (allowing_more == 1){
        if ($(window).scrollTop() + $(window).height() == $(document).height()) {
            allowing_more = 0;
            //query
            allowing_more = 1;
        }
    }
});

此时,如果用户再次滚动到窗口底部,则似乎会创建一个队列来保存用户在加载查询时滚动到窗口底部的事件。完成查询后,将执行这些事件。

我有一个布尔语句来检测匿名函数是否正在接受更多查询请求,但这似乎被忽略了。

是否有某种方法可以暂时忽略匿名函数并重新启用它?

4

3 回答 3

0
var flag = 0;
$(window).scroll(function() {
if(flag===0){
    if ($(window).scrollTop() + $(window).height() == $(document).height()) {
        //query
      flag = 1;
    }
   flag = 0;
  }
});

这应该工作

于 2012-11-28T04:50:16.947 回答
0

只需遵循这种模式,您的布尔条件就可以工作。

safeToQuery = true;  //
$(window).scroll(function() {
    ...
    if (safeToQuery) {
        safeToQuery = false;
        //send query request
        $.ajax({...}).done(function(data,etc){
            //do whatever with the results
        }).always(function (){
            //regardless of whether or not the last request resulted 
            //in an error, make it safe to query again
            safeToQuery = true;
        });
    }
});

注意:safeToQuery不必是全局变量,您可以在 立即调用函数表达式 (IIFE) 中将其声明为局部变量,或者仅将其设为某个对象的属性,该属性至少只要您需要保持滚动处理程序处于活动状态。

于 2012-11-28T05:14:04.757 回答
0

您只需要在上一个请求完成之前停止查询数据库,这是否正确?

如果这是正确的

var chkFlg=0;
$(window).scroll(function() {
    if ($(window).scrollTop() + $(window).height() == $(document).height()) {
        if(chkFlg===1){
           //query your database after you get your result from db assign 1 to chkFlg
            chkFlg = 1;
        }
    }
});
于 2012-11-28T04:43:34.323 回答