【问题标题】:ajax $.get() - requesting twiceajax $.get() - 请求两次
【发布时间】:2014-11-10 22:36:08
【问题描述】:

如果您到达页面底部,此 js 代码会从服务器加载更多内容:

if ($(window).scrollTop() + $(window).height() == getDocHeight()) {
    var next_pagenumber = parseInt($('#next_pagenumber').val());
    var num_pages = parseInt($('#num_pages').val());

    if(next_pagenumber <= num_pages){
      $.get("?page_number=" + (next_pagenumber).toString(), function(data) {
         if(data != "nomore"){
             setTimeout(
                 function(){
                      $('#next_pagenumber').val(next_pagenumber+1);
                      $('#morenews').append(data);
                 }, 500);
        }else{
             $('#loadmore').hide();
        }
      });

   }else{
      console.log('no more pages to load');
        }
   }

但是,如果您快速向下滚动两次,则会发送 2 个具有相同 GET 的请求。

我怎样才能让代码等到前一个请求的响应在这里?

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

这是 Bharath 所说的测试用例。设置一个布尔变量为true,成功后设置为false。

我正在检查检查页码的 IF 语句中的布尔值是否为真。

var ajaxTest = true;
if ($(window).scrollTop() + $(window).height() == getDocHeight()) {
    var next_pagenumber = parseInt($('#next_pagenumber').val());
    var num_pages = parseInt($('#num_pages').val());

    if(next_pagenumber <= num_pages && ajaxTest == true){
      $.get("?page_number=" + (next_pagenumber).toString(), function(data) {
         ajaxTest = false; 
         if(data != "nomore"){
              setTimeout(
                 function(){
                      $('#next_pagenumber').val(next_pagenumber+1);
                      $('#morenews').append(data);
                 }, 500);
        }else{
             $('#loadmore').hide();
        }
      });

   }else{
      console.log('no more pages to load');
        }
}

另外,这里有一个 jsFiddle http://jsfiddle.net/5eh2b7fb/1/

【讨论】:

  • 你在每个滚动事件中设置var ajaxTest = true;,变量不是必须是全局的吗?
  • @doniyor 你真的应该去抖动事件,这通常是避免你所面临的行为的最好方法
  • 我同意,但是,我只是展示了上面的评论示例。这可能不是最干净的方法,但它是一种方法。 :)
  • @A.Wolff 你的权利。我会看看去抖动。我一直想尝试一下
  • @MikeLegacy 是的,我猜你也应该在成功回调中重置全局变量。也许 OP 想要某种无限滚动
猜你喜欢
  • 2013-03-08
  • 2019-12-11
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多