2015-10-17 100 views
2

所以我有一个脚本从数据库中提取数据,并在用户接近页面底部时显示它。多次触发停止滚动功能?

问题:

当用户到达底部时,脚本应该只返回一个回传,而是多次发送请求的,导致所有的职位将被从数据库中拉快速的步伐,反过来返回错误的顺序。

我的问题是,有没有人知道如何防止它发生故障并防止垃圾邮件?

注:

我不希望完全切断AJAX从数据库请求关闭,一旦一个已经取得了,因为这个剧本是一个“无限滚动”,拉动文章逐一当用户到达底部。

在此先感谢,Rich。

$(document).ready(function() {  
     $(window).scroll(function() { 
      if($(window).scrollTop() + $(window).height() > $(document).height() - 200) { 
       $('div#loadMoreArticles').show(function(){   
        $.ajax({ 
          url: "loadMoreArticles.php?lastArticle="+ $(".postedArticle:last").attr('id') , 
          success: function(html) { 
           if(html){  
            $("#postedArticle").append(html); 
            $('div#loadMoreArticles').hide();  
           } else { 
            $('div#loadMoreArticles').replaceWith("<p>There are no more articles.</p>"); 
           } 
          } 
        }); 
       }); 
      } 
     }); 
}); 

回答

1

尝试定义处理程序命名功能,使用.off()$.ajax()调用分离scroll事件后,重新scroll事件$.ajax()完成

function scroller() { 
     if($(window).scrollTop() + $(window).height() > $(document).height() - 200) { 
      $(this).off("scroll.ajax"); 
      $('div#loadMoreArticles').show(function(){   
       $.ajax({ 
         url: "loadMoreArticles.php?lastArticle="+ $(".postedArticle:last").attr('id') , 
         success: function(html) { 
          if(html){  
           $("#postedArticle").append(html); 
           $('div#loadMoreArticles').hide();  
          } else { 
           $('div#loadMoreArticles').replaceWith("<p>There are no more articles.</p>"); 
          }; 
          // setTimeout(function() { 
          $(window).on("scroll.ajax", scroller) 
          // }, 500) 
         } 
       }); 
      }); 
     } 
    } 

$(window).on("scroll.ajax", scroller); 
+0

这工作的一种享受,欢呼的人。 –

2

希望这有助于

$(document).ready(function() { 
    var AjaxRequestOn; 
    $(window).scroll(function() { 
    if ($(window).scrollTop() + $(window).height() > $(document).height() - 200) { 
     $('div#loadMoreArticles').show(function() { 
     if (!AjaxRequestOn) { 
      AjaxRequestOn = $.ajax({ 
      url: "/", 
      success: function(html) { 

      } 
      }); 
     } 
     }); 
    } 
    }); 
}); 

只需使用一个变量来设置Ajax请求,在设定第一AJAX那么如果用户再次向上滚动,并归结则变量有一定的价值,所以我们不应该再次进行调用(在ajax调用之前检查循环)。如果变量没有定义,那么我们必须打电话给服务器。所以这只会导致一次调用服务器。

+0

功能是一个无限滚动之后。所以它只是通过你的建议通过AJAX返回我的LIMIT的PHP查询。 +1虽然。 –

+0

@Filthy_Rich在成功函数里面设置AjaxRequestOn = false。 – HeadCode