1

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

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

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

4

2 回答 2

5

正如您所说,这可能是因为用户滚动速度太快,并且文档没有更新为新结果。

尝试使用一个标志来阻止loadMoreResults()在函数仍在执行时调用。

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

例如:

function loadMoreResults() {
  if (flag) return;
  flag = true;
[...]
  flag = false;
}
于 2013-01-25T07:52:27.020 回答
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);
于 2017-04-15T15:36:33.300 回答