ajax $ .get() - 请求两次

时间:2014-11-10 14:28:05

标签: javascript jquery ajax

如果你到达页面的底部,这个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的请求。

如何使代码等到前请求的响应在此处?

1 个答案:

答案 0 :(得分:1)

以下是Bharath所说的测试案例。将布尔变量设置为true,并在成功后将其设置为false。

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

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/