0

我在下面的代码中添加了一个 ajax 加载器。问题是当数据库中的数据结束时,滚动功能仍然会进入无限循环,并且还会显示 ajax 滚动图像。我想在数据完成后停止滚动功能,并禁用 ajax 加载器图像。这是我的代码

var counter=25;
$(window).on('scroll',function(){
  if($(window).scrollTop()==($(document).height()-$(window).height())){
$('div#lastPostsLoader').html('<img src="loading-icon.gif">');
     //Get older posts
    $.ajax({
        type: 'POST',
        url: 'getdata.php?start_row=' + counter,
        success: function(oldposts){
        if(oldposts)
        {
            //Append #postsDiv
            $('#data').append(oldposts);
            counter += 15;
        }
           else
        {

            $('#lastPostsLoader').hide();
        }
        }
    });
  } 
});
4

3 回答 3

1

试试这个:

var counter = 25;
$(window).on('scroll', function () {
  if ($(window).scrollTop() == ($(document).height() - $(window).height())) {
     $(document).ajaxStart(function() {
        $('div#lastPostsLoader').html('<img src="loading-icon.gif">'); 
     });
    $.ajax({
      type: 'POST',
      url: 'getdata.php?start_row=' + counter,
      success: function (oldposts) {
        if ($('#data')) {
          $('#data').append(oldposts);
          counter += 15;
        }
      }
    });
    $(document).ajaxComplete(function() {
       $('div#lastPostsLoader').find('img[src^="loading"]').remove();
    });
  }
});
于 2013-01-15T05:18:01.610 回答
0

如果我没记错的话,在成功函数中,如果你得到数据,你应该把加载器本身隐藏在那里。我不明白在其他部分隐藏 $('#lastPostsLoader') 的目的是什么???

据我了解,如果您没有获得任何数据,您将隐藏加载程序。

于 2013-01-15T05:54:49.323 回答
0

@pavan

if ($('#data')) {
//if you have data process your business logic.
}
else
{
 //Hide the loader.
 //remove the event handler you can use .off for it.
}

用于删除事件处理程序http://api.jquery.com/off/

于 2013-01-15T06:03:56.043 回答