Ajax无限滚动功能发射两次。

时间:2013-01-25 07:48:13

标签: javascript ajax jquery

出于某种奇怪的原因,下面的ajax函数会触发两次。 loadMoreResults(); function用于从服务器检索数据。我使用谷歌开发者工具跟踪发送到服务器的数据,它显示ajax请求连续两次被触发。我想这会在用户快速滚动时发生。

 //Executed when user has scrolled bottom of the page
$(window).scroll(function (e) {
 if ($(window).scrollTop() == $(document).height() - $(window).height()) {
    loadMoreResults();
 }
 });

有关如何防止这种情况发生的任何想法? 感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

正如您所说,可能是因为用户滚动太快而且文档无法使用新结果进行更新。

尝试使用一个标志,以防止在函数仍在执行时调用loadMoreResults()

在函数启动时将其设置为true,最后,在获得结果后,将其设置为false。在将标记设置为loadMoreresults()之前,可以将标记的检查放在true函数的开头。

例如:

function loadMoreResults() {
  if (flag) return;
  flag = true;
[...]
  flag = false;
}

答案 1 :(得分:0)

出于某种原因,我无法弄清楚。设置一面旗帜并不适合我。函数调用仍然会触发两次。 我不得不在成功回调中使用超时

.then(function(resp) {
  var i, len, ref, t;
  ref = resp.data.users;
  for (i = 0, len = ref.length; i < len; i++) {
    t = ref[i];
    $scope.users.push(t);
  }

  return setTimeout((function() {
    if (resp.data.users.length > 0) {
      return $scope.busy = false;
    }
  }), 500);